docs: public static DualInputSemanticProperties addSourceFieldOffsets(DualInputSemanticProperties props,
  																	int numInputFields1, int numInputFields2,
  																	int offset1, int offset2) {
  
  		DualInputSemanticProperties offsetProps = new DualInputSemanticProperties();
  
  		// add offset to read fields on first input
  		if (props.getReadFields(0) != null) {
  			FieldSet offsetReadFields = new FieldSet();
  			for (int r : props.getReadFields(0)) {
  				offsetReadFields = offsetReadFields.addField(r + offset1);
  			}
  			offsetProps.addReadFields(0, offsetReadFields);
  		}
  		// add offset to read fields on second input
  		if (props.getReadFields(1) != null) {
  			FieldSet offsetReadFields = new FieldSet();
  			for (int r : props.getReadFields(1)) {
  				offsetReadFields = offsetReadFields.addField(r + offset2);
  			}
  			offsetProps.addReadFields(1, offsetReadFields);
  		}
  
  		// add offset to forward fields on first input
  		for (int s = 0; s < numInputFields1; s++) {
  			FieldSet targetFields = props.getForwardingTargetFields(0, s);
  			for (int t : targetFields) {
  				offsetProps.addForwardedField(0, s + offset1, t);
  			}
  		}
  		// add offset to forward fields on second input
  		for (int s = 0; s < numInputFields2; s++) {
  			FieldSet targetFields = props.getForwardingTargetFields(1, s);
  			for (int t : targetFields) {
  				offsetProps.addForwardedField(1, s + offset2, t);
  			}
  		}
  
  		return offsetProps;
  	}