ap.selectAttr(currentStep.nt.nodeName);
if (currentStep.nt.localName!=null) ap.selectAttrNS(currentStep.nt.URL, currentStep.nt.localName); else ap.selectAttr(currentStep.nt.nodeName);
	int process_attribute(VTDNav vn)		throws XPathEvalException,NavException {	    AutoPilot ap = null;	    boolean b = false;	    int result;	    int temp;		switch( state){		case  START:		case  FORWARD:		    // if this step contains any predicate that		    // require context size		    // needs to precompute the context size		    // vn.push2();		    // computerContext();		    // set contxt();		    // vn.pop2()		    // if the context size is zero		    // get immediately set teh state to end		    // or backward			if (vn.getAtTerminal()==true){				if (state ==START)					state = END;				else {					state = BACKWARD;					currentStep  = currentStep.getPrevStep();				}			} else {			if (currentStep.get_ft() == true) {				currentStep.o = ap = new AutoPilot(vn);			    ap.selectAttr(currentStep.nt.nodeName);				currentStep.set_ft(false);			}			if ( state ==  START)				 state =  END;			vn.setAtTerminal(true);			while( (temp = ap.iterateAttr()) != -1){								if (currentStep.evalPredicates(vn)){					break;				}										}			if (temp == -1){				currentStep.set_ft(true);				currentStep.resetP(vn);				vn.setAtTerminal(false);				if ( state ==  FORWARD){					state =  BACKWARD;					currentStep = currentStep.getPrevStep();											}				}else {								if (currentStep.getNextStep() != null){				    vn.LN = temp;   				    state =  FORWARD;					currentStep = currentStep.getNextStep();				}				else {					//vn.pop();					 state =  TERMINAL;					if ( isUnique(temp)){					    vn.LN = temp;						return temp;					}				}						}			}			break;					case  END:			currentStep = null;			// reset();	  		return -1;	  				case  BACKWARD:			ap = (AutoPilot) currentStep.o;			//vn.push();			while( (temp = ap.iterateAttr()) != -1){				if (currentStep.evalPredicates(vn)){					break;				}										}			if (temp == -1) {				currentStep.set_ft(true);				currentStep.resetP(vn);				vn.setAtTerminal(false);				if (currentStep.getPrevStep() != null) {					state =  BACKWARD;					currentStep = currentStep.getPrevStep();				} else					state =  END;			} else {				if (currentStep.getNextStep() != null) {					state =  FORWARD;					currentStep = currentStep.getNextStep();				} else {					state =  TERMINAL;					if ( isUnique(temp)){					    vn.LN = temp;						return temp;					}				}			}			break;					case  TERMINAL:			ap = (AutoPilot) currentStep.o;			while( (temp = ap.iterateAttr()) != -1){				if (currentStep.evalPredicates(vn)){					break;				}										}			if (temp != -1) 				if (isUnique(temp)){				    vn.LN = temp;					return temp;				}			vn.setAtTerminal(false);			currentStep.resetP(vn);			if (currentStep.getPrevStep() == null) {				currentStep.set_ft(true);				 state =  END;			} else {				 state =  BACKWARD;				currentStep.set_ft(true);				currentStep = currentStep.getPrevStep();			}						break;									default:			throw new  XPathEvalException("unknown state");	}	return -2;	}