		public void run() {
			while (true) {
				output.println("I get to run!!!");
				try {
					Thread.sleep(10); 
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				Packet p = new Packet(theRF.receive()); 
				short destAddr = p.getDestAddr();
				if((destAddr&0xffff) == ourMAC || (destAddr&0xffff) == 65535){
					output.println("Packet for us");
					if((destAddr&0xffff) == ourMAC && p.getFrameType() == 0){
						try {
							theLinkLayer.getIn().put(p); 
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
						byte[] fakeCRC = new byte[4]; 
						fakeCRC[0] = 15;
						fakeCRC[1] = 15;
						fakeCRC[2] = 15;
						fakeCRC[3] = 15;
						Packet ack = new Packet(1, p.getSeqNum(), p.getSrcAddr(), ourMAC, null, fakeCRC);
						try {
							Thread.sleep((long)0.01); 
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
						output.println("RF is free: "+ theRF.inUse());
						theRF.transmit(ack.getFrame());
						output.println("Sent an ACK");
					}
					else if((destAddr&0xffff) == ourMAC && p.getFrameType() == 1){
						output.println("Saw an ACK");
						if(theLinkLayer.recievedACKS.containsKey(p.getSrcAddr())){
							if(theLinkLayer.recievedACKS.get(p.getSrcAddr()).contains(p.getSeqNum())){
								output.println("Already got this ACK");
							}
							else{
								theLinkLayer.recievedACKS.get(p.getSrcAddr()).add(p.getSeqNum());
								output.println("Added an ACK for "+ p.getSeqNum()+ " from "+p.getSrcAddr());
							}
						}
						else{
							ArrayList<Short> newHost = new ArrayList<Short>();
							newHost.add(p.getSeqNum());
							theLinkLayer.recievedACKS.put(p.getSrcAddr(), newHost);
							output.println("Added an ACK for "+ p.getSeqNum()+ " from "+p.getSrcAddr());
						}
					}
					else{
						output.println("Didn't ACK a packet of type: "+ p.getFrameType() + " to address "+ (destAddr&0xffff));
					}
				}
				else{
					output.println("Addr: "+ destAddr);
				}
			}
		}

		public void run() {
			while (true) {
				output.println("I get to run!!!");
				try {
					Thread.sleep(10); 
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				Packet p = new Packet(theRF.receive()); 
				short destAddr = p.getDestAddr();
				if((destAddr&0xffff) == ourMAC || (destAddr&0xffff) == 65535){
					output.println("Packet for us");
					if((destAddr&0xffff) == ourMAC && p.getFrameType() == 0){
						try {
							theLinkLayer.getIn().put(p); 
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
						byte[] fakeCRC = new byte[4]; 
						fakeCRC[0] = 15;
						fakeCRC[1] = 15;
						fakeCRC[2] = 15;
						fakeCRC[3] = 15;
						Packet ack = new Packet(1, p.getSeqNum(), p.getSrcAddr(), ourMAC, null, fakeCRC);
						try {
							Thread.sleep(RF.aSIFSTime); 
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
						output.println("RF is free: "+ theRF.inUse());
						theRF.transmit(ack.getFrame());
						output.println("Sent an ACK");
					}
					else if((destAddr&0xffff) == ourMAC && p.getFrameType() == 1){
						output.println("Saw an ACK");
						if(theLinkLayer.recievedACKS.containsKey(p.getSrcAddr())){
							if(theLinkLayer.recievedACKS.get(p.getSrcAddr()).contains(p.getSeqNum())){
								output.println("Already got this ACK");
							}
							else{
								theLinkLayer.recievedACKS.get(p.getSrcAddr()).add(p.getSeqNum());
								output.println("Added an ACK for "+ p.getSeqNum()+ " from "+p.getSrcAddr());
							}
						}
						else{
							ArrayList<Short> newHost = new ArrayList<Short>();
							newHost.add(p.getSeqNum());
							theLinkLayer.recievedACKS.put(p.getSrcAddr(), newHost);
							output.println("Added an ACK for "+ p.getSeqNum()+ " from "+p.getSrcAddr());
						}
					}
					else{
						output.println("Didn't ACK a packet of type: "+ p.getFrameType() + " to address "+ (destAddr&0xffff));
					}
				}
				else{
					output.println("Addr: "+ destAddr);
				}
			}
		}
