public void AddLockAndCreateEmergencyReplacementAndResubmitFor(Order rejectedExitOrder) {
			int emergencyCloseAttemptsMax = rejectedExitOrder.Alert.Bars.SymbolInfo.EmergencyCloseAttemptsMax;
			if (emergencyCloseAttemptsMax <= 0) return;

			try {
				throwLogIfNotRejectedClosingOrder(rejectedExitOrder);
			} catch (Exception) {
				return;
			}

			OrderPostProcessorEmergencyLock emergencyLock = new OrderPostProcessorEmergencyLock(rejectedExitOrder);
			string msg = "Setting an EmergencyLock[" + emergencyLock.ToString() + "]";
			Order reason4lock = this.GetReasonForLock(rejectedExitOrder);
			bool isEmergencyClosingNow = (reason4lock != null);
			if (isEmergencyClosingNow) {
				msg = "ALREADY LOCKED (Rejected dupe?): " + msg;
				this.orderProcessor.AppendOrderMessageAndPropagateCheckThrowOrderNull(rejectedExitOrder, msg);
				return;
			}

			lock (this.emergencyLocks) {
				this.emergencyLocks.Add(emergencyLock);
			}
			CreateEmergencyReplacementAndResubmitFor(rejectedExitOrder);
		}
		public Order GetReasonForLock(Order order2check4similarLock) {
			Order ret = null;
			OrderPostProcessorEmergencyLock lock4check = new OrderPostProcessorEmergencyLock(order2check4similarLock);
			lock (this.emergencyLocks) {
				//bool contains = EmergencyLocks.Contains(orderGenerator);
				//bool ret = false;
				foreach (OrderPostProcessorEmergencyLock locks in this.emergencyLocks) {
					if (locks.Equals(lock4check)) ret = locks.OrderReasonForLock;
				}
				//if (contains != ret) throw new Exception("contains[" + contains + "] != ret[" + ret + "]");
			}
			return ret;
		}
		private void removeEmergencyLock(Order filledEmergencyOrder, OrderState stateCompletedOrInterrupted) {
			OrderPostProcessorEmergencyLock emergencyLock = new OrderPostProcessorEmergencyLock(filledEmergencyOrder);
			string msgPost = "EmergencyLock Removed [" + emergencyLock + "]";
			if (this.emergencyLocks.Contains(emergencyLock) == false) {
				string msg = "no EmergencyLock to remove: multiple QUIK callbacks? if u can find [" + msgPost
					+ "] earlier in thisOrder.Messages then it's ok";
				this.orderProcessor.AppendOrderMessageAndPropagateCheckThrowOrderNull(filledEmergencyOrder, msg);
				Assembler.PopupException(msg);
				//throw new Exception(msg);
				return;
			}

			lock (this.emergencyLocks) {
				this.emergencyLocks.Remove(emergencyLock);
			}
			OrderStateMessage omsgPost = new OrderStateMessage(filledEmergencyOrder, stateCompletedOrInterrupted, msgPost);
			this.orderProcessor.UpdateOrderStateAndPostProcess(filledEmergencyOrder, omsgPost);
		}
		private void throwLogAndAppendMessageIfNoEmergencyLockFor(Order order) {
			OrderPostProcessorEmergencyLock emergencyLock = new OrderPostProcessorEmergencyLock(order);
			if (this.emergencyLocks.Contains(emergencyLock) == false) {
				string msg = "who removed EmergencyLock before EmergencyCloseComplete?! " + emergencyLock.ToString();
				this.orderProcessor.AppendOrderMessageAndPropagateCheckThrowOrderNull(order, msg);
				Assembler.PopupException(msg);
				throw new Exception(msg);
			}
		}