Okay, so do you have my slides? Well, it would help. There we go. All right. Hi. Sorry about the technology. Yes. I know. Oh, hi. I'm Peter. I work for Power DNS. And I'm also running here the deaf room with Peter and the other folks. And I'm here to tell you a little bit about the new feature in Power DNS Authortator Server 4.2 where you can use Lua to generate answers. But not only that because, you know, that's boring. We've been doing this in the Recursor for all time. But you can even aches a far out this Lua to the other servers. So you have it all inside your zone. And I'm going to tell you all the cool things that you can do with it. So the big problem with DNS and DNS records in general is it's mostly static.  But due to the cache, we'll hand them out in a certain order for a certain amount of time. You cannot really do failovers with SRV records and services that support it. You can, of course, have multiple servers and failover between them on the DNS level. However, HTTP does not do SRV, which is the service that is most used, of course. You cannot really have a more specific answer per requester. So there is EDNS Client Subnet that I'll discuss a little bit later as well that enables this. But by default, it's not in the DNS or within the zone.  Even though they're stupid, we like them and they're kind of needed in the internet of today. So there are many solutions to these issues. There are alias records. There is CNAME FLEPNING. There is FLEPNING at the APEX. We have a bunch of non-portable solutions as well. We have a GOIP backend that you configure in YAML to do things. We have a remote backend that just calls a script where you can return records in any way, shape or form. We have a pipe backend that does the same but then as a sub-process. We have a Lua backend where you can type Lua and do all these things. And bind as GOIP features in 9.10 and on, which is a little bit more implemented as a view. And all these features, they're not compatible. If I want to do the same things in bind as I want to do in a PowerDNS GOIP backend, I need a completely different configuration and I also need to provide each server in my cluster with that configuration. There is no way for me to just use in-band AXFR to push this information to my slaves. So we would like to have something that can generate these answers dynamically. Exists within the zone file so there is no separate thing outside of the process. It can be AXFR between different implementations and probably requires no changes in recursors because you don't control those on the internet so you shouldn't just, you should just ignore them at that point. So this is the solution we came up with and they're called Lua records. And as we said before, we apologize to the Lua people because Lua has to be spelled with one capital L and small UA. However, in DNS everything is capitalized. So we call it Lua in full capitals. So what you see here is a small example zone. It has a Lua A record and a Lua Quad A record and it already shows you some of the features that we've implemented. So if this server would get a query for example, for A.example, which we assume is the zone, it will execute this bit of Lua which says if port up 443, sorry the HTTP port on one of these two IP addresses, it will return the address that is up. And if both are up, a random address is returned or you can select or you can have an extra option that will select which one should be returned. And the same goes for Quad A. Again, we check if the port is up or not. We check this I think every second from the name server and if it's down we mark it as down and we do the redirection like that. And if you do short TTLs, that is very cool. So Lua records, they're actually very tiny Lua scripts that are embedded in the zone. The processing happens at runtime so there is no pre-flight things that you need to do before provisioning the zone. You just put the Lua in there and it works. And we have a bunch of helper functions defined where for certain types like A, Quad A, like if port up that is an IP thing. For TXT we have some lock things. If you use GOIP we can actually send you the lock record where we think your resolver is. So like I said, Lua, why this is a programming language, why would we want this? So it's a very tiny language that you can embed everywhere. We have embedded it in DNS-TIST, it's in the recurser, it's already in the authoritative server in the form of an AXFR filter where you can actually filter records that you get from an inbound AXFR. And it is super tiny. There are no batteries included. And you get a huge standard library. And it's quite big. It's good. But with Lua you get almost nothing. You get a programming language and there is no standard library. You can just make whatever you want. And it's super-duper embeddable. So like I said, we've already have it in the recurser and DNS-TIST. And it has many language bindings. You can run Lua in GO, you can run Lua in Python because all these bindings just exist. We have a wrapper called LuaRapper, it's for C++ and it allows you to just wrap C++ functions directly to Lua functions. And we're very, very happy with it, which makes it super easy for us to actually just implement this in a same way. So how do they look like those Lua records in action? So we have a couple of variables that you get every time a script is invoked. That is who, ECS who and best who. Well, the names already say it. So who is the client IP address that you get? I'm not 100% sure about the interaction we have with XPF, but I'm pretty sure we will give you the... I hear Bert grumbling a bit, but we'll have to check that. So who will tell you the client IP address? ECS who if you have EDNS client subnet enabled and you get an EDNS client subnet option. ECS who will be filled with that address. And best who will be ECS who when it exists or who otherwise. So if you always use best who, you always have an answer there. And then we have a couple of functions that we have to create address records. So we have pick random. You just supply it with a list of IP addresses and it will just randomly hand out one. Pick W random. It will hand out a random IP address from a list, but the list is weighted. So you can have... I will have examples later on as well. So you can have a record with a weight of 20 and one with a weight of 10. And we will return the records with a weight of 20 twice as often as the one with 10. There's pick W hashed, which is again a weighted system, but we use the hash of the client to determine which address we're going to send. So we're not picking a random one. We will always send the same answer to the same client. And we have pick closest. If you're using the G-O-I-P module, we will actually send the address that G-O-I-P considers the closest for this user. We ask G-O-I-P. So we supply G-O-I-P with the IP information. We send an answer and we interpret that and then send off the response. So it's the interaction between it. But the information comes from G-O-I-P. There's some other functions. There is the view, which I found to be actually pretty powerful because you can implement views based on the source address as bind can do this in a configuration. However, you now have it in your zone. So you can just distribute this out to your slaves. And you have let long. This returns the G-O-I-P latitude, longitude if we have it. So how would you configure this? This is actually a working pdns.conf. You just, well, you bind to a few ports. You turn on edns subnet processing. You enable Lua records. They're disabled by default in 402. For one, they're experimental. And two, there are some security concerns. Well, what I'll get to later as well. And in this case, I'm running everything from a bind back end because writing zone files is easy and it's easy to show you. However, Lua records can live within PowerDN as in any back end because they're just records. So named.conf example.nl. I have two reverse zones that I'll show some things for as well. So this is the whole zone. Just put it here. So if you get the slide, you can just copy, paste it out and it will work. So for example.nl, I created a Lua A record with PIC random with a couple of addresses. And so I wanted to give a live demo, but I don't really like the demo gods. And then people, and then Fossum came, yeah, you need an HDMI connector and they don't have HDMI on my laptop. So I was like, well, then I'll just do the slide where you're just going to have to believe me and use a configuration to do it yourself. So as you can see, PIC random, I have a list of three addresses and every time I run a dig against the name server, I get a random answer. Super easy. You can also do things with, if you don't use the functions immediately in your configuration, you need to use a semicolon as you see there because we imply a return. So PIC closes will return something, but you don't have to explicitly tell Lua to return it because we imply that. If you do a semicolon, we will not add a return. So you have to return yourself. So you can do if, then, else, or even way more code. So here you see another function. It's called netmask. It does, it takes best who and tests if it is in this netmask. If it is, well, it takes a true path. If it's not, it takes the false path. And as you can see from the dig as well, if I query it, so this is running on the local loopback, so if I query it, I get the false path and if I add an ednsclient subnet option, which falls in the netmask, it will return the answer I wanted to return. But that's, of course, ugly. That's why we implemented view. So with view, it's very similar. As you can see, no semicolon because this has a return. I have three subnets. One of them is the fallback. And then based, and it will return actually a C name because as you can see it is service to Lua C name. And based on this subnet, it will return a different C name for the name service to. So if I just send a normal dig, you see it takes the default path because there is no client subnet information attached. For the system 2, you can combine all these Lua records. So I have an FIF port up there. And I will also use the GUIP functionality to pick the closest address to the user if the ports are up for both. As you can see, I am doing a query with a subnet. I will get the system 2.exe. Donal C name, then I end up at O5 because, apparently, O5 was up. Oh, so in the demo, I would actually show you the log of the server that said, hey, this one is up, this one is down when I take services in an auto production. And if I use a subnet that is not within that range, you indeed see, again, that you get the default. Similarly, for an A record in another, for the other view, for the other part of the view, you indeed see the other records that you get back. So this was an up-down. At this point, only this one was up, and at this point both were up. But unfortunately, it's not a real demo, so you have to believe me and try it yourself.  I'm pretty sure they're all expired to automatically create reverse records in zones. So within Bind, you can use $Generate if you want to have certain names generated. And there's also the bulk RR draft, which is something that you... So you put a kind of template in your zone, and then it will generate the name for you. We have done this within Lua. We have a couple of functions where you can generate default hostnames for IPv4, IPv6 addresses, and the other way around, you can do a wildcard record for Create Forward. So let me show you that as well. So I have this zone. I can create a reverse record, which takes all the octets that it gets from the DNS. And if I would put a start of host.example.nl in the example.nl zone, would they create forward with the same syntax? It will generate a forward... It will generate the name... It will generate the address for the same name. So you can have it both ways. So if I do a dig for something within the first... Let's see, 10.5, yeah. So within the first wildcard, it returns the octets in the reverse order, so in the IP address order name. If I do a dig for the start of one, I'm using a different formatting option there, and it actually uses dashes. And if you use the %6 formatting option, we will put the hex value of the IP address in the name. Same goes for IPv6. Again, we just have a zone with a single wildcard record, which has created reverse 6% 33. It's 33 because 1 through 32 are all the different nibbles you can get from the name. So you can even flip them around in the answer, which would be quite interesting. So if I would dig for this IP address, and I use %33, it will just take the address, replace all the columns with dashes, and append the host.example.nl to it. So on the security of these Lua records, like I said, at the moment, it's very much an experimental feature. There's no sandboxing. They can be enabled globally or per domain. If anybody has access to your master and can slave Lua records to you and you have enabled Lua records, they can just run arbitrary code within the context of the authoritative server. So this is something you should keep in mind. You can write a Bitcoin miner in Lua. That's no problem. Although we have limited Lua records to 1,000 Lua instructions per call, which is still quite a lot, but will allow you to do many of the things that you want to do. And of course, they use many more CPU cycles than regular records. So you would prefer to keep the TTL a bit high to not overload your authoritative server at that point. The current state. So as I was writing all these slides, I was playing around with it and the user is just quite rough. Error messages are not super good. Right now, if you need to use the GUIP magic, you need to start the GUIP backend. We'd like to take this out and just enable GUIP from the server configuration without needing the GUIP backend. There are no pre-flight checks. If you put Lua in there, you will only see an error once the record is retrieved. So there is no checking at the moment of whether or not your Lua is correct. But it works, and you can do a lot of fun experiments with it. And I think on Lua.powardiness.org, looking at that, there's a website with some configuration. Go to powardiness.org and there's a link there. Yes, where you can see all the latitude, longitude and all other kinds of fun things. So what's next for this? Because this is interesting stuff, but what do we want to do with it? So we're going to release authoritative server 420 somewhere soon. Alpha 1 is out now. We expect this to be like a month. We want to get some operational experience with Lua records, see what works, see if we can change security model, et cetera. Then we can polish the implementation. And we would like to create a set, a minimal set of useful things and maybe specify a little bit of how Lua should work and come up with a proper specification of a version 1 of Lua records and hopefully put that out to the ITF or at least to other implementers so we can have this whole thing interoperable and have dynamic record generation for everybody. And that's it. So if anybody has any questions. Thank you. Klaus. Thanks a lot for this cool feature. I'm a bit concerned of how does this if port up for example check works like in the background because it has to be scheduled regularly. So how often is it done and is it configurable and what if it's... I'm a bit concerned. Can there be some scenarios where it will block my standard DNS responses? No, the checking is running separately from the query processes. So it runs separately. It checks every second. It is not configurable at the moment. We would like to make it configurable eventually. Something I didn't show, by the way, apart from if port up, there's also if URL up where you can actually state a full URL. It will do a HTTP request and it can even check if there is a certain string in the response to see if it is properly up or not. And it will do it once a second. Yes. And what if this checks for some reason does not work and somebody queries like this label which has the Lua record, will it then get a surf fail or just... It will get a surf fail. If either Lua is incorrect, if the server is down, it depends on your backup selection there. So you can specify, okay, if everything is down, just send this IP address. But if it's up, then send this IP address. So you can actually redirect your users to a sorry page, if you want. Like, sorry, it's broken at the moment. Please try again later. I'm not concerned of the website is broken, but maybe the Lua feature in PowerDNS is broken, so that at least... Because now you're checking the website, but what is more stable? The website or the Lua check in PowerDNS? So of course the check in PowerDNS... It is not Lua doing the check. There is just a bunch of C++ codes running in the background. Yes. The implementation in PowerDNS must be more available, or higher available than the website itself. Otherwise it doesn't make sense to put in dysfunction in PowerDNS. Well, yes. Except that you can easily run two names, sir. And you can run two web servers that will not love that themselves. And also, we can surveil on this, so then your recurser will actually pick the next authoritative at that point. Who would hopefully not surveil? Yeah, if it's also PowerDNS with the same Lua record, it may have the same problem. Maybe some of the other vendors in here can help them. Ching? Just a quick question. Can you give different R codes for different values? Not right now. So you can't implement full views? No. Do you have T6 support? Well, we have T6 support on the aches of our end, but we don't have T6 support within the Lua records. I see. Okay. Almost there. Well, we accept this question. You're asking if the Lua codes can see if the query had a T6? I like that, but we don't... Could have these two features and you could replace fine views, which would be quite awesome. Go ahead. I'll ask a simple question. Have you tried dynamically updating Lua records? I have not tried.  And... Well... That's in policy now. But part of the problem was executing what Lua is doing. Part of it, though, was our customers keep wanting what would be the Lua instructions. So we constantly might change the instructions. I'm curious about how quickly you could change it. So from the view of the name server, it is just another record in the zone. Because Lua... So we squat a private code point for Lua. So it is just a different record in the zone, so it can be dynamically updated if your server is configured to allow this. Now, the people at home won't hear you. So for stuff like the PTR records and other things, can you do dynamic DNS as well? Yes. Everything is signed. That comes out of it. Everything is signed, although if you combine with AXFR, it got a tricky story. Yes. Then you still need the keys online on your slave, because the answers are dynamically generated. But yes. Have you done some benchmarking regarding the checks? Because when you say the checks are run every second. So if I have a tons of Lua in there, which is producing the checks. So Lua is not producing the checks. Once the function is called in the background we will just check it every second. And this state is available to the Lua. There is no checking at that point anymore. True, true. But it's going to produce load on the system. So the answer is no, we have not checked this. However, if your web server cannot handle one request a second, you have a problem. True, true. But the question is what's the upper limit or how many Lua? So like I said, this is experimental. We like to polish it. We like to get experience. So if you want to measure this, then please do. Because this is also good data for us. Thank you. Any other questions? Bert? You wrote this. You don't have a question, you have a comment. So actually my comment is more of a question. Can you tell me, Peter, does this stuff also support load balancing on a subsystem number, countries and continents with an exciting syntax to make sure that if people are not served by a local server, they will automatically fill over to a remote cluster? Yes. Yes. Anybody else? Any vendors willing to commit to an implementation now? No? Oh, it's too bad. Thank you.


So yeah, just a bit about me. I'm a developer advocate at Cisco Developer Relations Team. I'm actually from Austria. So speaking from Austria there, and usually like coming from a software, eclectic software engineering and networking background there. I also have to say, so I am taking most of the part over from my colleague, Christopher Fandamate. So maybe you see in some sample codes like his name. So just would like to mention him who can't like present today, but I definitely can talk to you about this as well. What do I have planned for you today? So the agenda is pretty simple and I hope it's you get as much out as possible with these scenarios there. So at first I would like to static stage about okay, where we are, or like what this is about. Then I will go through five common vulnerabilities and you can see, so I'm staying here completely at the coding level. So basically on what can you do or what kind of mistakes you shouldn't do, especially when you code in Python. Of course, in a container environment, in a Kubernetes environment, and then I will end with a notable tool set for you. So the main part of the presentation of the session will be about classic coding. And then of course there is a help there, especially like after deploying the application, there you have monitoring tools, especially for cloud native environments, especially for Kubernetes environments, which I definitely want to mention here as well. Cool, if you have any questions, I hope it's fine like to take this after a couple of minutes or in the chat if this is okay. All right, so setting the stage. So first of all, should I be worried about my HelloPython, HelloWorld.py script, right? So not all of our scripts or especially when you're testing our top priority, right? So this is basically best practice to write secure code that's for sure, especially with testing, but at minimum, and this is more important, you should know your code's weaknesses. So basically it's about, you don't need to secure your HelloWorld.py script and so on, but since you are like interested about this field, I guess you have already written some Python code and this is now you would like to take this one further and this is where you would like to implement it. And a classic quote is from Confucius and I think this really sets the setting, the security here is about to know what you know, but what you do not know, this is actually true knowledge. So you have the field on what you know, like what runs and then to do what actually you do not know that you are actually mentioning it or that you notice, this is actually that you have some really powerful knowledge there. And with that being said, I would like to also go through the OS list. So I don't know if you're familiar with that and we'll make, let this be, and I want to make this as interactive as possible. So if you, and I'm opening here now my web browser, you can see here that there's a website OS.org if you are not familiar with it. And this organization is actually bringing out the top 10 security issues from software engineering or like from developer application. So you can see here, there is a list. So like with the top 10 list of 21 and there's also like a really cool list like what has changed. So you can really see like what kind of issues are going up and which are basically number one there. And I, like no worries, I already checked this list here and you can see the top 10 list is actually broken access control which went up actually for five places up to number one. This will be covered. So then injection will be covered like you can see just a bit of example of the OS.10 list. Then vulnerable and outdated components, classic one and number nine as well, especially in coding security, logging and monitoring failure. So you just can see the bit that this, the basic the vulnerabilities which are there, they are actually based on the OS and based on specific research what mostly Chris and I did. So yeah, so one other important thing like when it comes to the OS top 10 is about before going into the vulnerabilities the speed of development versus security. So it's a classic thing that where should we focus on? Or where should you focus on? So basically the developers, you have to develop a point of view where they are focusing on a useful language creating useful features. So they collaborate with security teams only if there's some investigation if there's some bugs and so on. But this is basically it. And then you have the security point of view where you have hopefully, and this is, it really depends also on the environment of course, EBS security, EBS secure where teams where they ensure developers hate write secure software, right? So like check out your dependency, do some training, do some testing, create some test lines there. Most importantly, of course, create a pipeline even for that. And then on the other hand, it's like the stack ops team, right? Like this is really a team which is like from the operations part of view which is going more into the investigating the events like that could be like security incident or preachers or this plastic. And with this together, of course there's some tools that's out there. And tools that I will talk a bit later on and in between on what developers can also focus on. But now I really would like to focus on just the vulnerabilities in the code. And then again, more on the security side. Hey, like with application security and then of course with the operation part. Cool, so let's start with a classic one of the first one.  So what is it exactly? So an attacker's ability to run commands or code on target machines in a target process. So this is actually a classic most like a common vulnerability in Python. And you can also do this like when a user has some input there. So a classic if there is a database in a query like with SQL, if there is a command injection, like if there is an input there, right? And if it's not possible elsewhere, like otherwise there is like a user input which had directly passed into the function. And usually it's like a lack of input sanitation. This is a classic reason for that. But I would say let's actually look at the demo there. So I'll open here now my Visual Studio Code and going to the first one here. So this is, and I will make this a bit bigger and then you can see it. All right, so you can see this, this is a classic input. So like a classic input screen. So when I press something, type something here to compute. So two times two, the result is four. So this is pretty easy, right? What else you could do theoretically is that especially you can import the operating system package there. So like again, when I run this here, I import it and I actually can see, hey, this is actually the whole file system list there. And another thing what I guess you don't want to do in a way you can also execute some stuff. So a classic would be for example, to get the config there of your Kubeflow settings. Again, yes, let me, yeah, I don't have the Kubernetes installed, but for that it should work. So like you can also get the Kubeflow setting there. And now how can we solve this? And let me just go back to the slide there. So as before, as I said, it's like sanitize and validate the user inputs first before passing them to the system commands, right? So classic or like what are good examples of Python libraries what you can use is the SD Python module there, Schlax for example. So these would be some some classic like modules what can be solved if that. And let's also check out the solution for that. So with that, I actually put, so here this is basically the main commands there. So here you have again the input and then this input will actually be validated here. So we have a function there which validate the user input and it uses actually the SD library. So basically what it does, there again is like a function within the function with arithmetic. And here actually what it does, it actually parses the user input and creates some kind of like a tree, a tree there and check for each value. Hey, is this like a string? Is this a number like whatever? So if we compile this, so like if we execute this, then we type you something for compute. So let's do three times three. So it actually the three multiples of three actually says the results there. And then you can see here that there is the tree of the module and you can see like on the left, there is it analyzes, hey, there is on the left, there is an integer, the operator is to multiply and on the right side, there's again a constant with this kind of value. And you can also, when we tie this again, we can also like expand the tree and just do it like this. And then we actually adding a node there, we adding a connection there and you can see, hey, the tree is actually growing, right? So you can see like where is the offset and so on. So these kinds of like this kind of SD library is super easy, super cool to use. Also, once you know it easy, then you can actually see, hey, this is my string, this is an integer or this is like where I would like to have my users to go in there. Cool, and once again, so I will check it here. So this is the second, the next one is directory traversal attack. So maybe like from the, from the, what is it called like from the name, it's like again, always number three. Sorry, just to mention, like just to have the relation there. And this is usually caused by improper user input validation. So again, this is about something, hey, what you can definitely like clarify, especially when it comes to, in which directory the user should have access to or can save files. So what is it? So like it can lead to the sensitive files to be exposed. And then of course, you can do remote code execution, which is not that uncommon actually. So what happens? Like the path of the file, which is accessed by the Python script, this is not properly checked. So you can see here, the attacker actually can manipulate the path. So it's like going to a password file or like, you know, having some, some kind of unique characters there so that they can actually access the path there. And yeah, let's check it actually out in the demo. So if we go again to the vulnerability here. Hi Flo, would you mind increasing the, oh yeah, sure. Yes, code a bit more, thank you. Right, yeah, sure. Thanks for the feedback. All right, so you can see here now that we have again, simply file location input, then we open a file and we have the file content there. And I guess you already know, so like on the left side, you can see like I can type in here foobar, which is totally fine. This is this file we would like to access so we would like to say something in there. We execute it and it's the hello world part, but you could also theoretically do the same and exploit like here the cube config. So which is definitely not the best way. So what can we do instead of it? Like with these kinds of things, and this is not like with ASD, of course we can work as well. However, there are some other best practices there. So basically a good thing is to maintain an allowed list of files, especially like if you want to access it, or especially when you say something in a directory, like, you know, users uploading something, then use definitely a static save directory. So a classic thing would be, of course if the user cannot change the path, for example, so that you just selected, or the user is just selecting the file name and that all the files will be stored there if this is okay. But this would be the same if it's not possible, then there's also a solution what you can do. The other thing is about don't store, of course a sensitive configuration files inside the web route. I think this is the classic, but still some people are unfortunately still doing it. And validate the user input by accepting only specific and good data. And good data or like especially unknown file paths, I will show it, like the best practices actually not to sanitize the data with the ASD file tree, do it like this. So again, I'm opening here the number, three, it was, and here you go. So what it does actually, and you can see it's like this is a save directory and the save directory is actually from the parent path, like this is because of demo purposes slash foo and this is the save directory. And when the user is asking, hey, the input location, so I will just execute it, I actually say, I don't know something else, like slash etc slash slash slash or slash etc just, then you can see that the input file path is etc. The real file path is private etc, longest common path prefix. So this is like where it's like the input and the actual save directory, they are being compared. It's like only the root basically one is the common file path. And then you can see, hey, a request directory is not same as the save directory. So what would be a good input part, like the user can only do again foo slash bar txt. And then you can see that no, it's not in this save directory. And it should be there. Okay, I moved something around before that, I shouldn't have done it. That's the thing, but usually what the classic path is, is that with pathlib, and then again with the exception or with the prefix, you are actually saying, hey, if the prefix, and this is what you're checking against it, is the same path as the save directory, as the save here on what you have actually set up there. Then this is like, this directory is not the same, right? But if you actually check against it, then the file content, then the user is allowed to read it. So this is the classic path to say, hey, select a save directory and basically change it with the prefix on what you have there. All right, so then let's go to the next part. To the next part. So it's like what you can do. And this is like the outdated library. This is also I think a classic one. So keep in mind, like it's a classic, like libraries are written by humans and we do mistakes. And mistakes especially are getting exploited, mistakes are getting patched. So we forget to update the codes, we have like dependency and so on. And this is also like always number six there. And what is important here, like here's an example that always updated and always also check the changelogs. But usually you need to work like with you need to work in code something. So before checking the changelog, there are also like some other tools what you can use, which are coming a bit. Before that, this is a classic example, like requests you can see like from 2.19, there is like, it's like not secure. So definitely use the request library. I think everybody knows it is like 2.20. So basically what is, like there is a vulnerability. This is happens, like there is some HTTPS to HTTP redirect, which is like not so good for Sniffer's there. And what is the, how you can you solve it? So there are actually some capabilities of on how you can solve it. And I would like to go now into the two things, which is the static application security testing SAST and also run them application staff protection RASP. So this is basically what I would like to, would like to propose as a solution. And SAST, I would like to demo with GitHub. So with GitHub, maybe you're familiar, there is like code and security analysis. So if you enable all these settings there, then you actually get a message like this, we found a potential security vulnerabilities in your dependency.  Then you actually see directly, hey, we found security vulnerability there. The same you can do with a packages like with Node.js and so on. But this is basically like a really cool thing that you can see, hey, there is something happening. And also there is, you can like define a bot there where you get an email, where you get like a messaging request there to say, hey, there is something wrong with my code there. Cool, and yeah, like other things are there, you will have like alerts and so on. And this didn't happen right now, but like there will even be a PR to mitigate the risk there. Yeah, then what else is there in order to save it? Like this is classic code, but just for you to mention, there is also like a runtime application staff protection. And I used Cisco AppDynamics for that. So based on that, you can run this on a Kubernetes cluster, for example. So just to have like some visual screenshots, I think these are the best that you can see. So on the right side, you can see, hey, like the AppDynamics is a runtime installed when you're executing your application. And you can see, hey, there are some security events happening and this is actually happening during runtime. So there's no nothing happening like on GitHub before that. So it actually, this is happening like when the application is actually executing. And you can see at runtime, hey, there is the vulnerability library or hey, there is some outdated code running. And there's also like a calculated risk factor there. And of course you can go more in detail, hey, what is this about? You can see, okay, is it super severe? Like, is this like a really public knowledge or is there something like this has been solved like for ages? So you definitely should do something there. And then, yeah, like the StackOps team, Confuda attack, like this is a bit from the StackOps team. But then again, they can check with the owner, with the application owner, hey, like the responsible code, hey, where is actually the details there? Cool, then yeah, let's go to number three, which is then incomplete assertions. And I don't know if you're familiar with assertions, but these are especially for debugging. So just like upfront, this is mostly for debugging, which is also like a really important tool, especially when you would like to check, hey, like, is this actually, like, is this the right code? Should it be executed? Should the user actually come this far when this error message is being displayed? So what does it mean? It's like, so when a Python assertions are used to evaluate the condition, so like a classic Boolean expression. So if the condition is true, like if you can do it with the expression here, like in Python, you'd be asserted and then the expression. And then actually, if this is true, the execution, a Python will actually, the interpreter will go to the next line, but otherwise it will actually show an error. And this is especially good for debugging. And I have here like also brought here a classic example. So when you go to, so we, under the code, by the way, I will, it's shared on GitHub, so I will share it anyways. And you can see, and this is pretty, like once you understand it, also good to know. It's like you see, hey, the variable to assert is like a foo. We define foo, the string foo. And then we just type in here assert and say, hey, like is this string or bar to assert? Is this actually foo? And then if this is true, then actually nothing happens. It will just print the next line, right? But if it's the answer to assert is like bar, then actually it will return an error. And I will just run it and you can see it. Like we actually print next line one, but then you can see here that to assert the variable to assert bar is actually assertion error. And you can put in there anything you like, right? Like you can put in there a number and say, hey, number one, is a third number more than zero? Or is there, is it like a specific error code you would like to have? So this is all what's assert what you can test there. All right, then let's actually go to the next part. And how to solve it or like a classic part is like do not confuse like partner search and for logic. So like if and else statement, this is like only really for like testing environment and usually when you run Python code, like there are no assertions happening. So this is usually only for happening for debugging. All right, which brings us to the last one, which is then a broken access control. And this is, again, I set it here, the number one actually that you can see here. So you have like here, 94% were tested for some broken access control. So it's really number one. And there is some examples. So like the valuation of the principle of the lease privilege, then a key identifier change where I will check this, I will have a demo like in, or like a showcase in the next slide and the privilege escalation there. So a classic example would be, hey, you actually have the account details you write in here like just via the parameters ID, access key and access secret. And basically you can or the attacker can then give out the open secret there. So how do we solve it? So this is very important, it's like validation and verification of requests, but I think this is also a given. And then robust permission is an object level permissions so that the authorization, they need to be verified like if this is an authorized user and if this is like the same request there. And important thing is like the authorization and accounting, so AAA, this is very important because once you authorize the user, not the user, not all users can do the same action, right? Like an admin user can change something in the database where just the operator or something it just can do like can do a read only or like can only go to specific parts of the application. What is the best practices for sure? Like especially in the beginning, like use a pre-built authentication system framework. So Flask has one, Django has one, which is pretty extensive. So before you write your own, definitely check out these examples there. All right, so yeah, with that being said, I would like to close it with like a notable tool set there and with a graphic. So it's like a pretty extensive graphic there, but like- Running out of time, I think. Yeah, all right, I will just close one of this here. It's like that we started here, like with Python with the applications there, but there is so many other things like around it with Kubernetes with happening like between the containers like outside of the cluster. So all in all, we started just with the Python part, but all in all there is a huge other ecosystem around it. But yeah, with that being said, I hope you liked it so far. We covered all these vulnerabilities there and a bit with the tool set. And yeah, thanks for your attention. Thank you everyone. Maybe we have time for maybe just one quick question. Do we have any remote questions? No, anyone want to ask a question here? No, can you use the mic please? Hi there, great talk. Would you advocate using tools like mod security and BAF technologies as an extra measure? I would say so. So it's like, it really first of all, of course it depends on your setting. But I would say so, that this would definitely that you can leverage that. And for some other things, it's like it depends on where exactly, like do you run it in a Kubernetes cluster? Do you run it remotely? Do you need remote access there? So these kinds of things you definitely need, like need to have in mind. But for that, I would say go for it, yeah. Okay, thank you very much. Thank you.


Now, let us try to analyze the behavior by solving the equation of motion for the charge particle in a quadrupole field in the x direction and then we will try to calculate the transfer matrix for a quadrupole. So, the force on a charge particle is given by Q e plus v cross v in the x motion. Now, for this quadrupole the it is focusing it is a focusing quadrupole in the x direction. So, in the x plane the equation of motion is f x is equal to m d 2 x by d t square is equal to Q e x.  Now, in a quadrupole there is no electric field. So, there is only magnetic field here there is no electric field and the magnetic field is also only transverse there is no magnetic field in the z direction we have only b x and b y. So, we can write e x is equal to 0 and b z is equal to 0. So, we put e x is equal to 0 and also b z is equal to 0. So, we get this equation of motion we get f x is equal to minus Q v z b y and b y is got g into x where g is the magnetic field gradient. Now, let us change the coordinates from z to t we know that z is equal to v z into t. So, d z is equal to v z into d t. Again taking the second derivative. So, we will get d 2 x and simplifying we will get d 2 x by d t square is equal to v z square d 2 x by d z square. This we can substitute in this equation here and we will get the differential equation now in terms of z instead of t. So, this is the equation that we get now we can put Q g by m v z is equal to k x some constant k x because for a given beam and for a given charge particle and for a given quadrupole these are all constants the Q is the charge which is constant m is the mass v z is the velocity. So, it is moving with a constant velocity there is no acceleration in the quadrupole g is the gradient of the quadrupole. So, we get d 2 x by d z square plus k x into x is equal to 0. This is the equation of a simple harmonic oscillator and the solution of this equation is x is equal to a cos under root k x z plus d sin under root k x z. We can differentiate this with respect to z and we get this. So, now, if you see the solution of the equation of motion is sinusoidal. So, that we get that if the charge particle is entering inside a quadrupole the motion inside is sinusoidal. Now, if we terminate the quadrupole at a very small distance or in other words the length of the quadrupole is very small then we can determine the values of. So, it will it need not be fully oscillatory you can terminate it here you can have a short quadrupole and then you can determine the values of the constants a and b from here. So, let us see how it can be done. So, let us say now this is the quadrupole and the coordinates of the particle at the entrance of the quadrupole is x 1 x 1 prime and as it exits the quadrupole it is x 2 x 2 prime. So, we consider a quadrupole of length L the charge particle enters the quadrupole at z is equal to 0 with initial coordinates x 1 and x 1 prime at the exit of the quadrupole the coordinates are x 2 and x 2 prime x is the position coordinate and x prime is the derivative with respect to z which is also called the divergence of the particle with respect to the z axis. So, the boundary conditions at the entry and exit are at z is equal to 0 x is equal to x 1 and x prime is equal to x 1 prime similarly at z is equal to L x is equal to x 2 and x prime is equal to x 2 prime. So, we can substitute this in the solution. So, the solution of the equation was in terms of x and x prime. So, applying the first boundary condition at z is equal to 0 x is equal to x 1 and x prime is equal to x 1 prime. So, we put this equal to 0. So, this will go to 0 here and we will get x 1. So, this is equal to 1. So, we get x 1 is equal to a and putting in this equation this will go to 0. We will get x 1 prime is equal to b under root k x. From here we can find out the values of a and b, a is equal to x 1 and b is equal to x 1 prime by under root k x. So, then we can substitute the values of a and b in these equations and this is what we get. We get these two equations like this. Now, let us apply the second boundary condition. So, at z is equal to L, x is equal to x 2 and x prime is equal to x 2 prime. So, let us put this. So, at z is equal to L, x is equal to x 2 and x prime is equal to x 2 prime. So, this is the equation that we get. Now, this equation can be written in matrix form again. These two equations can be written like this. So, we have x 2, x 2 prime in terms of x 1 and x 1 prime. So, we get a matrix like this. So, these are the initial coordinates, the coordinates at the beginning of the quadrupole and this is the final coordinates that is the coordinates at the end of the quadrupole and this is now the transfer matrix of the quadrupole. So, we can write this as x 2 is equal to m q x. Now, m q x is the transfer matrix of the focusing quadrupole times x 1. So, x 1 is x 1, x 1 prime and x 2 is x 2, x 2 prime and this is the transfer matrix of the focusing quadrupole. Now, notice here this depends only on the parameters k x and L and k x depends upon what? It depends only upon the beam parameters and the quadrupole parameters. So, k x if you remember is q g by m v z. So, q is the charge of the charge of the charge particle, n is the mass, this is the velocity and g is the gradient of the quadrupole. So, this depends upon only k x and L which is again the length of the quadrupole. So, if you know about the parameters of the beam and the quadrupole and you know the initial coordinates. So, you can find out the final coordinates of that charge particle at the end of the quadrupole. Now, similarly you can find out the motion of the single particle in the quadrupole field in the y direction. So, that same quadrupole in the y direction it is a defocusing quadrupole. So, here is the charge particle it is coming here it gets defocused and then it moves out. So, here we see that the initial coordinates are y 1, y 1 prime and the final coordinates are y 2, y 2 prime. So, we can write the equation of motion in y. So, you get an equation like this again substituting q g by m v z is equal to k y in this equation. So, this equation will have solutions in the form of sin hyperbolic and cos hyperbolic terms and then we can apply the boundary conditions at z is equal to 0, y is equal to y 1 and y prime is equal to y 1 prime, z is equal to l, y is equal to y 2 and y prime is equal to y 2 prime. So, substituting these we can find out the transfer matrix of the defocusing quadrupole. So, here transfer matrix has terms in the form of cos hyperbolic functions and again it depends upon k y and l. So, just the parameters of the beam and the parameters of the quadrupole. And so, again if you know the initial coordinates you know the about the beam and the quadrupole you can find out the final coordinates. So, this transfer matrix method is very useful in finding out the final coordinates of a particle if you know the initial coordinates. Similarly, just like a magnetic quadrupole we can also have an electric quadrupole. So, since it is an electric quadrupole there will be electric field. So, we will have potential instead of a magnet we will have now potential supply. So, this is these opposite poles are at positive potential and these opposite poles are at negative potential. So, you can draw the electric field lines and again you can resolve them in all the four quadrants. So, you see that for the electric field the force is in the same direction as the applied electric field. So, this type of electric quadrupole will focus in the y direction and defocus in the x direction. If you reverse the polarities that means you make this and this as positive and you make this and this as negative then it will become reverse. Okay and again you can use a combination of two electric quadruples and focus in four directions. So, an electric quadrupole has four poles arranged symmetrically in the x y plane. So, this is x and this is y. The beam is moving in the z direction with velocity v z. So, as before you have the beam here moving in the z direction out of your screens. So, here direction of the force is same as the direction of the electric field. This quadrupole will focus in y direction and defocus in x direction and here now notice that the force due to the electric field is independent of the velocity. It does not depend upon the velocity unlike the force due to the magnetic field. So, thus we have calculated the transfer matrix for a focusing quadrupole for a defocusing quadrupole and for a drift space. In this way we can calculate the transfer matrix of any element in a beam line or even in an accelerator. So, every component let us say we have a bending magnet or let us say even an accelerating gap all these components will have a transfer matrix. So, we have calculated the transfer matrix of some simple elements. So, others will also have a transfer matrix and by using if you know the transfer matrix and the initial coordinates of the charge particle at the beginning of that element you can find out the final coordinates at the end of that element. Now, let us calculate the focal length of the quadrupole in x. So, since it is a focusing quadrupole. So, it acts like a lens. So, it will have a certain focal length. Now, in the x direction the quadrupole focuses. So, the charge particle enters the quadrupole. This charge particle is entering the quadrupole of length l at a point a. So, it is entering here at a point a which is and it is parallel to the z axis. So, this is the z axis it is parallel to the z axis. Then it gets focused in the quadrupole. So, it gets focused because it is a focusing quadrupole and exits the quadrupole at point p. Then there is a drift space of length l after the quadrupole. So, in this drift space after the quadrupole the beam gets focused at a point s at a point c which is at a distance s from the quadrupole. So, even in a way of light if you see you have a you have a converging lens in order to calculate the focal length you bring the ray of light parallel to it and then you calculate after what distance from the quadrupole it gets focused. So, similarly we have the charge particle coming parallel to the z axis it is getting focused in the quadrupole and finally at a distance s after the quadrupole it gets focused or in other words it comes to the axis. And we want to calculate what is this distance s. So, magnetic quadrupole behaves like a convex lens in the x direction. Okay now you can calculate the coordinates x3 x3 prime in terms of x2 and x2 prime. So, if you know the length of the drift space. So, x3 x3 prime is simply the transfer matrix of the drift into x2 x2 prime and x2 x2 prime is simply mqx that means the transfer matrix of the focusing quadrupole into x1 x1 prime. So, instead of x2 x2 prime this is equal to this I have just equated this here okay. So, now writing you know the transfer matrix for the drift space of length s and you know the transfer matrix for a focusing quadrupole. So, you can simply write this like this and now you can do the matrix multiplication and this is the resultant matrix here. So, now by definition of focal length a parallel beam comes to focus at the focal point at the point c here okay this distance is f. So, for a parallel beam now this initial beam is parallel. So, that means the angle that it is making with the z-axis should be 0 or in other words x1 prime should be equal to 0 okay. Also since this beam is getting or this charge particle is getting focused at points c here the displacement of this point from the axis should be 0 in other words x3 is equal to 0. So, now you can apply these two conditions here you can put in x1 prime equal to 0 and x3 is equal to 0. So, you have this x3 is equal to this. So, it is in terms of x1 and x1 prime and x3 prime is again in terms of x1 and x1 prime. So, you can write these equations from the matrix equation for a parallel beam x1 prime is equal to 0 and at the focus x3 is equal to 0. So, you put x3 is equal to 0 here and x1 prime is equal to 0 here. So, you get this expression. So, this is equal to 0 and from here you can calculate the value of s and it comes out to be cos under root kxl divided by under root kx sin under root kx into l or in other words it is cot of under root kxl divided by under root kx. So, this is the focal length of a focusing quadrupole. So, again it is in terms of the it depends upon the beam velocity the beam mass and depends upon the parameters of the quadrupole. We can also calculate the focal length of the quadrupole in y this quadrupole is the focusing in y. So, in the y direction the quadrupole de-focuses the charge particle enters the quadrupole of length l at point A parallel to the z-axis. So, again you have to take a parallel beam. So, it enters here parallel to the z-axis it gets de-focused inside the quadrupole and exits at point B. The focal length is the virtual distance s behind the quadrupole where the particle appears to get focus. So, this is the distance s behind the quadrupole where it appears to be focus. Again this is analogous to ray optics for a de-focusing lens. So, magnetic quadrupole behaves like a concave lens in the y direction. So, you can calculate the focal length here s comes out to be minus cot hyperbolic under root k yl by under root k y. So, you can in this way you can find out the focal length of a given quadrupole in the x and y direction. Now, let us see the thin lens approximation for the quadrupole. In the thin lens approximation applies when the length of the quadrupole is much smaller than the focal length of the quadrupole. So, let us say you have a quadrupole let me represent it by a lens this length is very very small as compared to this focal length. So, this length of the quadrupole is very small as compared to the focal length. So, length is small. The length of the quadrupole then approaches 0 while holding the focal length constant. So, that means l tends to 0 whereas k x into l is not equal to 0. So, the focal length 1 by the focal length is given by this expression you have under root k x tan under root k x into l this can be written. So, you multiply and divide by under root k x l here. So, this term will tend towards 1 and you are left with this under root k x under root k x multiply to give k x into l. So, the focal length is then given as focal length is 1 upon k x l. So, this is the thin lens focal length of the quadrupole. So, wherever you have quadruples that are very small in size as compared to the focal length of that quadrupole you can use the thin lens approximation it is a simpler formula to calculate the focal length. So, this is the focal length you can also calculate the transfer matrix using the thin lens approximation. So, here negative sign is for the focusing lens and positive sign is for the de-focusing lens. So, this is the transfer matrix for a thin lens approximation of the quadrupole both the focusing and the de-focusing. Now, in the thin lens approximation as the particle travels through the lens the position coordinate of the particle remains fixed, but the divergence changes. So, since the quadrupole is very thin and we have assumed that the length is 0. So, the position at the beginning and the end remains the same and what changes is only the divergence of the particle. So, if it is a focusing lens the divergence reduces and if it is a de-focusing lens the divergence increases. So, this is the location of the thin lens thin quadrupole lens at the in this axis. So, here the length is 0. So, this is the charge particle earlier it had a divergence which was like this the thin focusing lens has now changed the divergence to this value. Okay. Similarly, for the de-focusing lens this was the charge particle this is the thin lens the thin de-focusing lens this is the initial divergence of the particle and now when it comes out of the lens of 0 length the divergence has increased it is in the positive direction. So, let us see the behavior. So, it is easier to visualize the behavior of the particle in real space, but the trace space gives us more information. So, let us see the behavior of single particle motion real and trace space. So, for a drift space so this is x and z so in so this is the initial position of the particle and it is moving with a fixed divergence. So, here x prime does not change and it is moving from here to here. So, it is a diverging particle. So, you can see here at this location let us say this position was x1 and here the position is x2. Okay. At this at both the locations the divergence is the same. So, let us see in trace space trace space is simply xx prime. So, in xx prime this is the original position of the particle. So, it had a so this corresponds to x1 and then finally it moves here this corresponds to x2. So, the position of the particle has changed from x1 to x2, but if you see the x prime it remains the same in going from the first location to the second location the divergence has not changed. Similarly, for a quadrupole let us say I have a quadrupole and the initial position is here and then the charge particle goes through the quadrupole and gets focused. In this case if you see here this is x1 and this is x2. x2 is slightly more than x1. Okay. So, as it is exiting from the quadrupole the x2 is slightly more than x1. So, here the divergence has also changed it was it was diverging beam and now it has become a converging. So, this is the location here and this is the location here. So, this corresponds to x1 and this corresponds to x2. So, x2 is slightly greater than x1 and the divergence has same changed sign because here it was a diverging beam and here it is now a converging beam. So, it has come from the positive axis to the negative axis. Now, for a thin lens, so thin lens is the length of the length of the lenses 0. So, this is in real space. So, this is a focusing lens the slope decreases. So, initially the slope is like this and then as it passes through the lens of length 0 the angle decreases. So, here the position remains same because the length of the quadrupole lens is 0. So, you can see here x1 and x2 are the same this is at the same location only the angle has changed from positive to negative. Similarly, de-focusing lens here the slope increases. So, initially it was like a converging particle or a converging beam and then after passing through this thin de-focusing lens it has become a diverging particle. So, the again the position is the same this is x1 and the angle has changed from negative to positive. So, in this way you can visualize the behavior of a single charge particle in gray space. Okay, let us see how matrix formalism is useful in solving problems or finding out the coordinates of the particles for a large system. Now, let us say we have a large system where we have a quadrupole where we have a quadrupole magnet. So, let us say this is a focusing quadrupole magnet followed by a drift space. So, there is no field in this drift space. So, these drift space are often utilized for putting in vacuum pumps or some diagnostics or just for putting the flanges between two elements. So, there is a drift space. So, first we have a focusing quadrupole followed by a drift space then there is another quadrupole which is a de-focusing quadrupole again a drift space then there is a bending magnet here again followed by a quadrupole magnet focusing quadrupole magnet a drift space between the next two quadruples again a de-focusing quadrupole and drift. Okay, now I want to find out the coordinates of the particle at this location. I know the coordinates of the particle at this location. So, let us say the coordinates here are x1 and here it is x9. So, I want to find out the coordinates x9 okay and I know the transfer matrix of the focusing quadrupole the drift the de-focusing quadrupole and the bending and I also know the parameters of the beam. So, let us see how we can find it out. So, this is the initial location of the particle okay and this is how it will travel. So, this is a focusing quadrupole it is focusing it then there is a drift space it moves with the same angle or divergence there is a de-focusing quadrupole but de-focuses the beam then another drift space then a bending magnet and so on. Now, I want to find out x9 and x0 I know. So, x9 I can if I know x8 I can find out and I know the transfer matrix of this drift I can find out x9 okay. So, x9 is simply equal to the transfer matrix of the drift into x8 and x8 is this point I can write it in terms of x7. So, x8 is simply transfer matrix of the de-focusing quadrupole into x7 and x and so on. So, this can be found out so on. So, here x9 x9 prime can be you multiply all these transfer matrices you can find out if you know the initial coordinates you can find out the final coordinates at the end of this large system. So, thus we see that the matrix formalism is very useful in knowing the final coordinates of a particle in a huge large complex system. So, if we know the initial coordinates of the particle and the transfer matrices of the elements in between we can find out the final coordinates of the particle by matrix multiplication method. So, let us summarize what we have learned today. The beam tends to diverge in the direction transfers through the direction of motion due to various reasons. So, it could be due to the inherent divergence of the beam it could be due to the RF RF fields which cause de-focusing it could also be due to space charge forces. So, beam can be focused in transverse direction using magnetic or electric quadrupole. So, we saw how a magnetic quadrupole focuses we saw how an electric quadrupole focuses. A quadrupole focuses in one direction and de-focuses in the other direction. So, this is true for both quadruples both type of quadruples a magnetic quadrupole or an electric quadrupole. A combination of two quadruples of opposite polarities can be used to focus the beam in both the transverse direction. So, if you use two quadruples with opposite polarities then the net result will be focusing in both the directions. Solenoids focus the beam in both transverse directions. If you use a solenoid you can use you can focus with a single solenoid it will focus in both x and y direction. The matrix multiplication method the matrix multiplication method using transfer matrices of the various elements can be used to find the final coordinates at the end of the elements if we know the initial coordinates of the particles and the elements of the transfer matrix. In the next lecture we will learn more about transverse dynamics of beams. So, today we learned about single particle behavior. So, in the next lecture we will see how the beam envelope as a whole behaves.


Section 91 of English and Cantonese Dictionary. This is a LibreVox recording. All LibreVox recordings are in the public domain. For more information or to volunteer, please visit LibreVox.org. English and Cantonese Dictionary by John Chambers, revised and enlarged by Thomas Kirkman-Dilly. Section 91, Vituperative Zagma Dic, Vituperative Language. Li Ma Ji Yu, Vivacious or Vivit, would put.  It is not invoked here.  你有嘔無呢? To vomit and purge 嘔舍 Vomitory 致嘔的 To take a vomitory medicine 食嘔藥 Volatious 大食 嘔啦 大食嘅嘔啦 貪食 惠食 嘔口殘 Volatiously 大膽吞 Volatiety 貪食 Vortex 船水深 Volatry 好奇土者 Or 誠心奉神者 Or 寫身於某的 Volat for 舉 願舉 To vote for him 選舉他 To vote against him 投明得寶他 A written vote 投明之單 Or 寶舉之囚 To put to the vote 投明決是 A vote of Thanks 謝言 選舉者 Or 投明者 Voucher 憑句 Vouch safe 恩準 Or 準行 Or 次 Vow 許願 Or 世願 Fulfill a vow 還願 Volatiety 首同征 Take the vow As monk or nun 受介 Vow 自恩之治 Voyage 水路 Or 水情 To start on a voyage 開船 Or 開身 To proceed on the voyage 行船 Pleasant voyage 順風相送 During the voyage 行船之間 To make a voyage too 搭船去 Voyager 行船者 Vow 族 Meaning low 屎頸 Or 灰皮 Or 屎族 Or 灰配 Or 皮露 Or 犯賞 Or 犯賞 Vowager expressions 理言 Vowager accent 聲點 Vowager and superficial 淺率 Vowager things do not satisfy The eye 俗物不如目 俗物不如目 Vowager talk 粗話 Vowager person 皮膚 Or 繁膚 Vowager name 俗名 Vowager saying 俗語 Vowagerism 粗俗 Or 粗俗之語 Vowagerity 悲 Or 戰 Or 下流 Or 皮戰 Vowagerize 洗為粗俗 Vowager 立丁文性經 Vulnerable 愛得的 Or 可傷害的 Vulnerary 異傷的 Vulnerable 異傷的 Vulnerary herbs 異傷之草 Vulpine 狐狸的 Vulture 戰 Vover of animals 貧戶 Letter W Wobble 轉得鬆 What? 火藥塞 Or 火藥塞 What? 棉鴨 What? 棉花片 What? 得下得下 Or 兩邊閘 He waddles like a duck 佢鴨屎提咁行 Wait 澆水 Wait across the stream 澆水過河 To wait through an affair 哩攝之 Waiter 攝者 Or 攝水鳥 Wover 火漆片 Or 風湖 Or 神餅 Or 聖餅 Waffles 鴿餅 Waffle irons 蜂鴿餅鴿 Waffle irons 蜂鴿餅鴿 Or 鴻餅氣 Waffed 漂流 Wet A wet 好趣人 To wet 擺 To wet the tail 擺尾 To wet the tongue To wet the head 搖頭 Wage 賭 Or 雙賭 Or 風 To wage war 動幹過 Or 出兵 Weather 賭菜 Lose a weather Literally shake the corner of the mat 養隻角 To weather a dinner 賭東頭 Wages 工錢 Or 工銀 Or 人工 Or 新金 Or 新鳳 Advance wages 按家 Detect from one's wages 求工 Or 工錢 Or 工銀 Wages 求工銀 To pay wages 支工銀 Or 出人工 Or 出銀 How much wages do you get a month? 一個月得幾多工銀呢? Wage 催乖 Or 喜玩灑 Wage-ness 少玩 Wago 吊吊蜂 Wago is about like a fish 一條魚咁擺 Wagon 再貨車 Or 大居 Wagoner 車庫 Wagtown 隻零 Or 年前 Or 隻零 Wave 拾物 Or 器物 Or 漂流者 Or 無家者 Well 哀哭 Or 喊哭 Or 撩撩 Or 哀哀痛哭 Or 吊死 Or 吊喪 Wage-ness Wage-ness Wage-ness Wage-ness Wage-ness Wage-ness Wage-ness Wage-ness Wage-ness Wage-ness Wage-ness Wage-ness Wage-ness Wage-ness Wage-ness Wage-ness wind, 北斗, windskirt, 遮長花板, or 蓋長板, or 木板, waist, 腰, waist belt, 腰平, or 腰平, or 腰帶, waist warrant, 腰牌. Tight a string of cash around his waist, 腰前一分, a waist bag, 前代, a slender waist, 腰細, or 扭腰, the waist of a ship, 船腰, or 船之中部, waistband, 腰頭, or 腰, waist coat, 背心, weight, 等候, or 等下, weight, 等下咋, weight and it shall be so, 等下遮, weight some time, 熱住, weight a point, 縫是, weight a little, 行下遮, weight to feel weaknesses, 候保, I wait for you, 候家, I shall wait for you to arrange the guests, 候醉, weight till next year when the melons come in season, 花期以待, weight a minute, 武志, weight a bit, 等來啲, weight for the turn of the tide, 手水, must weight a while, 需待時, weight it a long time, 等得許久, weight till it comes, 聽佢來, weight for him, 聽下佢, weight till next moon, 自下月, weight for an answer, 樂志回音, weight for death, 自死, let it all wait, 一致, a man may have instruments of husbandry, but that is not like waiting for the farming seasons. 需有志機不如待時, to wait for a favorable wind, 候順風, to late wait for, 埋伏, to lie in wait, 暗伏, weight on, meaning serve, 伏是, waiter, 師仔, or 走保, waiting mate, a bright waiting mate, 群腳妹, wave, 遊德, wave off, 拓手頸, wake, 醒, wake from sleep, 睡醒, or 醒起, or 睡醒, waking, or sleeping, 群妹, everything wakes up in spring, 春天滿蜜街上, and of section 91, section 92 of English and Cantonese Dictionary. This is a LibreVox recording. All LibreVox recordings are in the public domain. For more information or to volunteer, please visit LibreVox.org. English and Cantonese Dictionary by John Chambers. Revised and enlarged by Thomas Kirkman Dilley. Section 92, wakeful, 醒, or 唔, or 不睡, 打醒, or 叫醒, walk to walk, 行, or 行路, take a walk, 去逛, walk path, 小路, stop walking, 住步, now walking, now looking about, 行下望下, walk in procession, 行鄉, walk backwards, 腳行, protect by walking, 腳跪, I will walk about the air, 哨歌果達定, walk this way, 打理術行, have a little walk, 打個轉, walk on the hills, 登高, or 逛下山, walk through burning charcoal, 都會嘆, learning to run before one learns to walk, 未學行先學跑, to walk ahead, 前行, or 先行, to walk past or by, 經過, to walk up, 想, to walk lame, 低行, to walk across, 還過, to walk in, 行入, to walk out, 行出, shady walks, 陰路, walker, 遊者, or 行者, a street walker, 街上嘅窗府, or 窗記, war, 窗, or 壁, a wall, 復窗, a wall opposite temples or offices, 秀壁, not the head against a wall, 哼頭買窗, to plaster a wall, 復一窗, rubbish against the wall, 哼買窗, boards for making adobe walls, 夾牆板, raise a wall, 淋牆, 淋牆, parapets of a wall, 排賴, the Great Wall, 馬里牆城, the tullary deity of world towns, 城王, inner and outer walls, 城光, on the city walls, 城上, or 城鄧, base of a city wall, 城街, lower portion of a city wall, 城庚, tower over a gate in a city wall, 城樓, or 城樓, to build a wall, 築城, amongst walls, 燈牌, guard the walls, 手牌, a family only, but four empty walls, 家圖四壁, paced up on the wall, 貼在牆上, lay a wall, 砌牆, a wall of unburned bricks, 泥牆, a brick wall, 磚牆, the end wall of a house, 山牆, or 金字牆, a carved and painted wall, 雕牆, make walls of concrete, 中牆, one wall for several houses, back to back, 一條牆過, remember that walls have ears, 雖之隔牆有耳, at bay, back to the wall, literally no way in front, pursuing soldiers behind, 前無去路,後有追兵, wallets, 包袱, or 荷包, wallow, 亂, or 展轉, like a beast in the mud, 暗扮, or 暗扮, wallow in the water, 暗水, wallet, 合桃, wallets, 海馬, wampie, 黃皮, wang, 白白地, wand, 紫邊乾, magic wand, 石像, or 線像, wander, 流離, or 周遊, meaning Mr. Way, 當室路, your mind is wandering over the 24 points of the compass, 里心二十四向, a wandering ghost, 涉青鬼, or 遊魂, know not where he has wandered to, 唔知當去邊處, wandering herdsman, that is nomad tribes, 遊牧, chief and assistant superintendents of wandering tribes, 遊牧精位, and 遊牧夫位, to wander astray, 迷路, wandering thoughts, 遊獅, wandering people, 遊民, wandering talk, 暗話, wandering free booters, 流策, or 流匪, wang, 水, or 輝, wang of the moon, 月缺, waxing and wangling, 迎血, the wangling of the moon, 月缺, or 月輝, The moon having been full, wings again, 月門則歸, want, 要, meaning defect, could 罰, meaning destitution, 窮機, or 咬 ngay, just as I wanted it, 正要, in want of food, 佛食, I say you are wanted, 海叫啦, dust wanted, 收埋乌泥, I don't want it, 唔愛個的, you want too much, 你愛得多, I can guess what you want, 我批縱你, want more to eat, 食過縱想, want for nothing, 食物唔愛, I fear it doesn't want it, 受佢唔愛, wanted instantly, 等緊用, do as you want, 任你意, or 任由你, when the fear is dainty, who wants to lay down his chopsticks, 老核的果子誰肯放筷子, to be wanting in respect to others, 失禮任, to see what is right and not do it, is want of courage, 建議不為,無用也, What you do not want done to yourself, do not do to others, 己所不欲,物事於人, want of forbearance in small matters confounds great plans, 小不忍則亂大謀, The getting of them will preserve life, and want of them will be death, 得之則生,忽得則死, wanton whole sick, or whole pill, or 放蕩, or 春意, or 痴情, wanton thoughts, 任意, a wanton woman, 任苦, wantonly, 放肆, wantonly rob and pillage, 請惡行劫, war, 打仗, or 戰士, or 交兵, or 幹過, A war chariot, 隔居, the god of war, 關帝, or 關羽, stir up war, 動幹鍋, the gods of literature and of war, 文武以帝, war junk, 詩船, articles of war, 軍法, or 軍令, the boat of war, 兵部, war between two nations, 兩國相戰, the fortune of war is uncertain, 勝負無常, open war, 攻打, or 攻戰, council of war, 戰會, men of war, 戰船, or 兵船, art of war, 武藝, scene of war, 戰場, a protracted war, 狗戰, weapons of war, 兵器, war, 黑鞋, a naval war, 海戰, or 水戰, to declare war, 投戰書, war to the bitter end, 死戰, powers at war, 戰過, to go to war, 出征, war bow, 唱, the wobbling of the birds, 鳥之提聲, wobbler, meaning silver, 瘦眼, grass wobbler, referring to the birds, 蒙膠, war vessel, 兵船, wad, referring to division, sky form, referring to apartment, 房, to ward, 防守, or the wards, 眾約, to ward of calamities, 漢灣, or 渠和, or 綁殺, a military ward, 暴落, warden, 看守者, warden of a college, 掌援, the warden of the mint, 前局司, water, 守者, or 巡查者, wardrobe, 衣服櫃, or 衣上櫃, or 衣上櫃, ward room, 關窗, or, 船內士官會宴所, warehouse, 贊房, or 貨倉, a tea warehouse, 茶贊, warehouse rent, or charges, 贊租, warehouse keeper, 管贊者, warfare, 交戰, where, 貨物, wares, for, miscellaneous wares, 雜貨, to deal in miscellaneous wares, 雜貨法核, China ware, 池黑, earthen ware, 鴨黑, silver ware, 銀黑, hardware, 鐵黑, crockery ware, 碗盞杯盤, craignal ware, 碎瓷, double strong ware, 商料, or 商料, element ware, 景泰男, or 廊遊戲, place the best wares on the top to sell, 裝頭賣麵, warlike, 母, warlike man, 母夫, warlike arms, 乾鍋, a warlike nation, 有勇之國, a warlike spirit, 勇氣, warm, 亂, or 熱, warm the hands, 直手, warm the hands with the breath, 撲亂手, it is rather warm today, 今日係亂亂的, much warmer, 亂好多, warm air, 亂氣, fat and warmth, 飽亂, rather too warm, 大熱的, warm air, and fat, one bao, a warm day, 亂天, warm springs, 溫泉, a warm heart, 熱心, a warm engagement, 大進, warm at the fire, 紅火, a grass cloth cobblet over him the whole night, do not keep him warm, saddle one who obstinately refuses or advice and on home time and words are wasted, 下步皮咁野都唔亂, warming pan, 亂窩, or 亂婆, warmth, 亂, or one warmth of fire, 亂, warmth of the sun, 圈, fluctifying warmth, 雨雨, warm, 景, or 景界, or 提醒, or 如先話之, or 景察, or 情創, be warned against doing that again,景界下次, warn the public, 視眾, to warn one of his duty, 勸人手本份, warning, 鑑, to give warning of danger, 提醒, he pays no heed whatever to my warning. 拒傳不聽我的景言, take this as a warning, 以此為街, words of solitary warning, 若石然, injunctions and warnings, 丁寧告街, words of warning, 偽然, punish one as a warning to others, 情景, to give preliminary warning, literally, to beach the sides of the drum, 打下古編, wall office, 冰暴, 挖, 驚善, or 驚, 挖 and wolf, 驚為, the wind dries and warps things, 風高脈糙, 雷的瓦, 驚殺, the book cover warps, 豬皮供喜, to warp, 亂, or 瓦亂, and of section 92, section 93 of English and Cantonese Dictionary. This is a Leopold's recording. All Leopold's recordings are in the public domain. For more information on the volunteer, please visit Leopold's.org. English and Cantonese Dictionary by John Chambers, revised and enlarged by Thomas Kirkman-Dilly. Section 93 warps, 亂, or 咬, a warped mind, literally, studied the same page all his life. Section 95, 一篇書漢到老, warrants, a warrant, pill, police warrant, 猜票, to warrant, 包補, or 護照, or 排票, or 信票. Warrant for Investiture Abroad, 徹封, warrant decree, conferring rank or order of limited heritatory nobility, 徹名, warrant edict, for promulgation in colonies.  This is a bitterer than year wax that is a bitter pill to swallow. This is a bitter pill to swallow. Wax to wax, chong or shang or shen, wax and wang ying kue, the moon waxes and wanes, yu mun yu fei, to wax and polish, cha lap, yi and wax fax, sik fan sang yu, end of section 93, section 94 of English and Cantonese dictionary. This is a Libervox recording. All Libervox recordings are in the public domain. For more information or to volunteer, please visit Libervox.org. English and Cantonese Dictionary by John Chambers, revised and enlarged by Thomas Kirkman Dilly. Section 94, wax candle, lap chuk, wax work, lap chau or lap chau ge wun mud, wei, tiulou or douluu, meaning method, fong fa, street gateways of posts, cha lan or cha nga, the Milky Way, ngon ho or seng ho. In this bold way, gom dham zo, it should be this way, li so hai gom. Which is the way to go, heng bian tiulou, out of the way, thai pong gat sou or zhe shun ha. Do by the way, dai sou, go this way, da li shu hau. By the way, shun lu, only one way there, dan bian lu, go round that way, guo guo tou or wun guo bian ha. You live in such a secluded way, li zhu de gom boi. Move out of his way, be ha kui. Do it in the same way, ngon zhu gom zo fa. Or is in the same way, yi zhong do hai gom yang ge. The way of heaven is to reward the good and punish the wicked. Tiin do fuk sin wo yam. In what way do you feel sick? Li kien dim yang wu zi chai le? The way of the gods of Shinto, seng do. To give over in the middle of the way, zhong do yi fei. Clear the way for. Hoi lu, way fairer. Lu ha, way lei. Yu do, wc. Xiao bian so, or chi so. A new wc has three days good business. Sin shi hang yu sam yat wong.  Li hai sin shi hang, wayward. Ngau geng, we. Ngoh dee, our or my. Ngoh dee, or ngoh dee ge. Weak, yuen yac. Minimotory, tam, or hui yac. Or dan bok. Or yau yac. Weak-minded, ji hei yac. Too weak to wear his clothes. Yac bus seng yi. He is really physically weak. Zhen zheng sun yac. A weak stomach, hui han. Fa too weak, tam dek jai. Very weak, tam yin mi. Strong and weak, long daam. Weak as water. Sui no. Getting weaker every year. Lin li ngam hei lei. To side with the weak in a quarrel. Ka leung, or ka leung. My eyes are weak. Ma ge ngan mou jeng sun. Weak-en. Ling yuen yac. To weaken the body. Ji sun tei yac. Weak-ly. Yac. Or mou lik. Weak-ness. Pei. Or yac. Take advantage of my weakness. Hei meo yuen. Wealth. Caibar. Or fu gui. Or ji guo. Mem of wealth. Caizhu. Or cai dong. Or cai zhu luo. Influence of wealth. Caai lik. Craving for fame and wealth. Lik yu ming li. Renounce wealth. Xie fu. The god of wealth. Caibar xiang guan. Or cai sun. Astroin of the god of wealth. Zui bou tou. Astroin of the god of wealth. Wong seng tou. Wealth benefits the house and virtue the person. Fu yu nguk, dek yun sun. With wealth, you can move even the gods. Caai hei yi thong seng. Wealth is a blessing to the good. Occurs to the wicked. Xin yen dek fuk wai chi shang. Ngok yen dek fuk wai chi yang. A superior man helps the distressed. But does not add to the wealth of the rich. Kwan ci jau kyap. Puk gai fu. Using one's body to obtain wealth. Wealth gotten by improper ways will take its departure by the same. There is a great cause also for the production of wealth that is, let the producers be many. Sang chai yu dai dou. Sang ci jie zong. Let them have their wealth. I have my benevolence. Bei yi qi fu. Ngok yi nguk yun. Wealthy. Fu hau. Or, So tou seng. When wealthy act as one who is wealthy. So fu kui. Heng fu fu kui. Don't be in too great a hurry to become wealthy.  Li mu hou seng jiao zong sui man gai bán. Wien. Duan lai. Or, Duan yu. To win oneself from pleasure. Jut fai lo. Weapons. Lei hei. Or, Hei hai. Or, Hu chi. Guns, swords, and other weapons. Chang do hei hai. Weapons are like fire.  Bing yu fo ya. Fu chup ci fun. Wear. Wear clothes. Chun zhe. Wear a hat. Dai mu. Wear a show. Lou. Wear out. Jue wai. Wear well. Kham. Wear clothes. Chun zhe. Wear a ring hat. Ho lak. Wear the can. Dang ga. Won out. Ching gam. To wear a false bridal cuffier. Made of paper. Dai fa lak. To wear a sailor. Juen li. Wear a feather. Dai fa ling. Or, Dai fa ling. To wear a show. Lou bok gen. He wears only the skin of a man. That is, it's only a sham. Lou chuo yan pi. Wear on the person. Pui sun. Wear a sword. Pui kim. Wear morning. Chun so. Wear a cap. Dai mu. Wear spectacles. Dai ngang gam. Wear out of a button. Deng dai. Wear a bamboo hat and rush sandals. That is, living in rustic retirement. Yok mou mong hai. Viri sun. Lou sun. Or, Lui duk. Or, Fan lan. A Viri sun post. Fan kue. Viri. Pi kuen. Or, Gou kuen. Or, Kuei.  Li mu yim. Viri the gods. Ngai po sard. So Viri. Gong do kuei. Virit. Yim fan. Or, Geng yim. Or, Kun kuen. Or, Miet yin. Or, Ngai kuen. Or, Kun sui. Or, Thai kuen. Viso. You suu. Or, Wong suu lo. Weather. Tin hei. Or, Tin si. Good weather. Ho tin. Hot weather. Tin si yit. The weather. Yu phong. Hot weather. Ngai hei. It will not harden in warm weather. Tin nuan bu mai. Sol tree weather. Yu lao tin hei. Bright optimal weather. Chou sang. Clear fine weather. Yibat tin. Fine weather. Tin cheng. Meet bad weather. Chou phong. Discuss the weather. Jui huan wan. Rainy weather. Yu tin. Wet weather. Sub tin. Stormy weather. Phong yu tin. Foggy weather. Mou tin. Hacy weather. Ha mou tin. The weather changes. Tin si bin. To weather a storm. Mou phong yu.  Shun phong yu. Weather glass. Phong yu bill. Or, Phong yu zhum. Weave. Chik. Weave together. Chou mau. Weave cloth. Chik bo. Weave mats. Chik chik. Weave straw shoes. Chik chou hai. Weave ribbons. Chik dai. He has the classics woven into him. Yau geng wei. The spider weaves its web. Zhizhu bo mong. Weaver. Chik bo yun. Weaver's room. Gei phong. A weaver's shuttle. Gei chu. A weaver's room. Chik chang zi gei. Web. Yat gei bo. Yat gei bo. A spider's web. Zhizhu mong. The spider makes a web. Kam lu geng si. Web footed. Gei zi gan yau mo. Or, eo jang. Wead. Chui chan. Wead the effigy of a betrothed husband. Gea shang. Wead a husband. Gea fu. My wedded husband. Wo so ge ge fu. My wedded wife. Wo so chui ge chai. Wedded to his cause. Chong kui ge yi. Wedded to calamity. Ge yu wo. Wedding. Fun yun. Or, sun fun. Go through the wedding ceremony. Have fun. Exchange the wedding presents. Seng fun. A wedding between relatives. Lian fun. Wedding feast. Hei chua. Or, jiao chua. Or, jiao chik. Go to a wedding feast. Yin sun lang jau. Wedding day. Seng qi. My poor wedding. Pun chui. Your splendid wedding. Weng chui. Arrange your wedding. Ge sheng fun yun. In quantum edge the wedding of a daughter. There is a great to do. Guangdong gia lui. Ho do si. There is to be a big wedding next week. Dai yi go leibai you dai fun yun si. He invites me to his wedding feast. Ge cheng oi yim chui chan jau. Wedding ceremony. Fun yun si lei. Wedding clothes. Ho po. Wedding sedan. Fa giao. Or, hei giao. Wedge. Zim zheng. To wedge. Sipe. To wedge in. Da jim. Wedge it in. Sipe ju kui. Level it by inserting a wedge. Sipe zheng. Wedged in unevenly. Sipe me. Wedge the legs of the table. Zientai ge. Wedlock. Seng ga sus si. Join in wedlock. Pun hap. Born out of wedlock. Ye san. Wedge day. Leibai san. Wee. Saisiao. A wee bit. Da da. Weed. Ye chou. To wedge. Mung chou. Gora. Tong liang. To wed out grass. Ho chou. Overgrown with weeds. Mung long. Weed rice fields. No wo. Weed. Leibai. The seven weeks of morning. Chachong. This week. Ni go leibai. Next week. Dai ge leibai. Or. Hou go leibai. Last week. Sien go leibai. Weep. Lou lei. Or. Weep loud. Harm. Weep and well. Thay ho. To weep blood. Yuck血. Weep noiselessly. Thay yuck. Weep in silence. Sun thay. Weep vitally. Tong ho. Or bay ho. Or fu ho. Eyes red from weeping. Lui an. Weeping willow. Shui yang lau. Or. Qing ming lau. Weevils. Mai lau. Wei. Qing. Or doi. Or kuen. Or kuen heng zong. Or Qing. Accurately weights. Qing do zhun. Wei ti. Qing cha. Or bong cha. Weighing scales. Zheng bong. 12 Chinese ounces weight and English pounds. 12 liang wei yik bong. Weight it accurately. Zha wun cheng. Weight anchor. Gai lam. Or hei nao. Or gau nao. How many maize does it weight? Gei chien chong. Weight silver. For exchanging. Dui an. A rat fell into the scales and weighed itself. Compared to the pride of the cobalt's dog. Lu shu di luok tien ping. Ji gei cheng ji gei. And of section 94. Section 95 of English and Cantonese Dictionary. This is a LibreVox recording. All LibreVox recordings are in the public domain. For more information on the volunteer, please visit LibreVox.org. English and Cantonese Dictionary by John Chambers. Revised and enlarged by Thomas Kirkman-Dealy. Section 95. Weiyang Machine. Qian gen cheng che. Or bo. Weight. Fa ma. Gau ch wei ch. Ping ma zi. Man wei ch. Ma zi. Fu wei ch. Jok si ma. A dead weight. Si gong chong ge ma. What is the weight? Gei do gen lang. Calculate the weight by packs. Liang gen do. Ten tails in weight. Sub lang chong. Over weight and light weight. Xin man. Too light weight. Man wu gau. Make up for light weight. Bo ping tou. Net weight. Jing chong. Sell by weight. Chut do. Or fa do. Weighty chong. A weighty matter. Gen yu ge si. Weer. Zha liang. Or yu bo. Openings in the weir for fish traps. Yulang. A waste weir. Sui zha. Weird. Ming. Or yu su. Weird phenomena. Wan zhao. Welcome. To welcome. Hei jeep. Or fun ying. Welcome one back. Jeep fong. Dinner given to me. Dinner given to welcome one. Jeep fong zhao.  Yingsong. He makes himself welcome everywhere. Hoi hoi chung. Wealth. Yong mai. Wealth fair. Ping an. Or fuk. Wealth. Or wealth. Jeng. Or anan jeng. Petroleum wealth. For jeng. Jump down a well. Tou jeng. A well bucket. Diu tong. Clean out a well. Tou jeng. Clear out an old well. That is Marry a Rich Old Widow. Tou gu jeng. Tou gu jeng. Dig a well. Hoi jeng. Or chun jeng. Or wad jeng. I dig the well, but it draws the water. That is, he reaps the benefits of my action. I wipe my jeng kui yim sui. To regard the well from the inside of a well. That is, to take a narrow view of things. Chua jeng guun tian. A frog in a well. That is, inexperienced. Jeng diwa. Well. Ho. Well in health. Zi zai. Or ho. Get well. Ho fan. Or ho la. Well meshed. Up ci. Well, as you say, gam wa la. He speaks very well. He gong wa lan ho. Well principled. Zi gai. Or chun jeng. It will make you well. Giao li ho. It looks well. Come thai. Do you look well after it? Li gu gen. Are you well? Na fuk. Well then granted. Yi la. Well, let it be so. Chua hai gam. Well-boiled. Sab lam. Repair well. So li. Well-metered. Sik dai thai. How do you do so well? Mat de li gam ho? Ho. Well-read. Duk sok. Well-dressed. Zhuang chuk ho han. Or da ban de ho. It promises to end well. Ho man ging. Fasten it well. Su chu kui. Well said. Gong toh. Very well. Toh gik. Are you well? Li ho ah. I'm not well. Mu shou yong. I am half-well. Ho fan yat boon. You cannot get quite well. Kui bu lang yi de yu. Well-read. Suan ban yin. Well done. Zhu de ho. Meet well done. Well done. Ho so. Bravo. Ho. Well to do. Yin sut. Wen. You. Hanging on like a wand. That is a hanger on. Zui yuen you. West. Sigh. The west. Sigh bin. Or sigh phong. Fluts from the west. Sigh sui. The paradise of the west. Sigh phong kik luok sigh gai. Or sigh tiin. North west. Sigh buk. South west. Sigh nab. A young swell from the western suburbs of Canton. Sigh guan ah guun zai. Go west. Thou sigh. Regions of the west. That is god of fire. Wa guang dai dai. Accompanying Buddha. We should go with him. To the paradise of the west. That is nothing should be done by halves. Song fatsong tou sigh tiin. Wet. Sigh. Or. Zem sigh. Or. Da sigh. Or. Dap sigh. Or. Dap sigh. Will not bear wetting. But come out. Wet through. Lam sib. Wet the bed. Wai niu. God wet all through. Pizzab go sun. Or. Dap sib sun. Fail and God wet. Dit sib. Wet dreams. Mong sib. Mong sib. To get fairly wet. That is soaking wet. Zem yab sun. Don't wet it. Mu ho jing sib kui. Very wet and dirty. Sib sib nub nub. Apply a wet cloth. Dat sib fai bo. Weather. Yim yue. Wet nurse. Wet nurse. Nai ma. Or. Sib ma. Or. Yu mou. Well. Hai chou yu. Or. Keng yu. Pushed along on the well's head. That is first of the hangling graduates. Duk zi mou tou. The monster bird is a metamorphosis of the well. Kwan fa wei pa. Throw a spread to catch a well. Literally to throw a brick for a pearl. Pao chun yun yu. Well bow. Chou yu guat. Well fishery. Bu keng yu zi si ye. Weller. Referring to the ship. Keng suan. Referring to the man. Bu keng zi. Wolf. Ma tou. Or. Bu tou. Wolfage. Ma tou chien. Or. Ma tou chien. Wolfenger. Kuan li ma tou zi. What. Mut ye. Meaning that which. So. Or. Mut ye ah. Or. Mut ye ah. What was hard to obtain. One drags to lose. Wan dek wan suk. What price will fetch. Suan ngan do siu. What price did it fetch. Suan guo gei do ngang. What do you expect of me. Ba wo dim yang. What purchases are there. Yow mat lou tou. What can you do. Li mat gei lang. What a good child. Mata kong guai. What I have been told. Wo teng lai gei. Add a lot what to do. Mut dap sab. What fellow is that. Mat di lu. Mat di lu. What is the mark on the dial. Mut ye kuei ha. What is your business. Yow mat kuei kuan. What does it mean. Diem gai. If so what then. Gung bei diem le. What is it. Mi ye le. What some is still. Gei ngan yue kuan. What has gone wrong. Yow ho cho su le. What is that to you. Yu li ho kuan le. What for. Wei mat ye. Or wei mi ye. What is business. Kuei do mat ye sangee le. What price is this. Ga chien le. What day of the week is this. Gung yat hi leibai gei ne. What date is this. Gung yat hi mat ye yu日 zi ne. What's a dollar worth in cash. Yet kuei ngan chien jau de gei do chien. Or chien. What is your surname. Goh seung ah. Or. Kuei seung ne. What is your age. Kuei gung ne. What is your name. Nei kiu mat ming. What is his name. Phun mat ming. Whatever. Or whatsoever. Mat ye. Or mi ye. Or mu run mat ye. Or mu run mi ye. Have nothing whatsoever to do with. Mou li si. Of no importance whatsoever. Mou li gen yeu. Weet. Mok. Weet ran. Mok hon. Or mak fu zi. Winter wheat. Sook mok. Buck wheat. Kiu mok. Or mu mok. Or kiu mok. Or sam gok mok. Wheat sprouts. Mok nga. The wheat harvest. Mok tou. Wheat chirp. Mok yu zi. Wheat is ground into flour. Mok mok seung phun. The reapers throw the wheat in a heap. Soo gok ge rin jang mok do ma yi doi. Yat doi. Wheat cakes. Mien beng. Or yau san. Wee do. No nan. Will. Lun. Or chae lun. Turn the wheel. Chuen chae. Wheel round. Lun chuen. Or gok luk. Or lun gok. The bamboo stream above the wheel. Luk gok. A large wooden wheel. Ku luk. Or ku luk. The rut of a wheel. Lik luk. A spinning wheel. Sui luk. Lift the stone wheel. That is a trial of strength. Kyu chae lun. Or kyu chae lun. Kyu chae lun. Put your shoulder to the wheel. Ji chuc lik. M kou rin. Wheel barrel. Suo chae. Or mok ou nau ma. Literally wooden oxen and mechanical horses. Wheel raise. Sui chae su. Wheel ride. Zou chae lun jang. Wee zing. Wee zing. Ha sen. Wee zing kow. Chuen fei. Wheel k. Yau yu. Or zhou min. Whem. Zm. Or chum. Wheel. Kyu zai. Alliance webs. Si yu yi. Wen. Kei shi hoi sen. When did he arrive? Kyu ho shi lai. Wen. Kou shi. Wen yang. Suo lien ji shi. When about to die? Lim sei ji shi. When luck fails, even gold loses its color. Wan bai wang gam satsik. When a fault is known, it should be amended. Zi guo bii gai. Wen shi. Yau bin chu. Or hei bin chu li. Wen shi. From which. Suo yi. Or yan wei. Wen shi it follows. Suo yi yau. Wen shi it appears. Yau ci guan zi. Whenever. Cui shi. Or mui fung. Whenever you. Cui li gei shi. Whenever it is wanted, it shall be given. Cui yau cui kup. Whenever I meet with it. Cui yu. Where? Bin chu.  Or bin wei. Or bin da. Where did it come from? Hei bin shu li gei le. Where are there any? Bin shu yau le. Where is it from? Bin dek li. Where is your tongue? In the sense of ask.  Hau zai lu bin. Where there is much merit, there is great reward. Gong do yau hou shuang. Where are you from? Li hai bin shu gei in. Where? Ge chu. Or ge shu. Where about? Gan bin chu.  Or gan he shu. Or he shu. Where else? Jiu dek. Or ge yin yu chi. End of section 95.