To find what all condition element is true in a rule
In drool we have any option to find what all condition tuples satisfied in a rule, when I execute a stateless session with fact.
ex: if we have rule condition in a rule RUL1,
car.schi == 'A' || car.carKind str[startsWith] 'A'
if RUL1 is satisfied because of car.schi, then do we have any API where I can get this info(car.schi).
The example what I given was simpler but our actual business rule was so complex as shown below,
(car.carKind != "EZZ" && car.carKind != "ENG" && car.carKind != "ETD") && ((car.schi contains "N1" || car.schi contains "N2") || ((car.schi contains "IH" || car.schi contains "N4" || car.schi contains "OM" || car.schi contains "DA" || car.schi contains "N5" || car.schi contains "PA" || car.schi contains "FG" || car.schi contains "PL" || car.schi contains "PC" || car.schi contains "PO" || car.schi contains "NG" || car.schi contains "OX" || car.schi contains "OP" || car.schi contains "NS" || car.schi contains "FS" || car.schi contains "FL" || car.schi contains "N3" || car.schi contains "CM" || car.schi contains "DW" || car.schi contains "PB") && (validateElementRule($trainrulesRequestDTO.getElementRuleMap(),"1_N",true,$trainrulesRequestDTO.getCar().getCarNumb())))) && (((car.prevSchi not contains "N2" && car.prevSchi not contains "N1") && (car.prevLoadEmpty == "L") && ((car.prevCarKind str[startsWith] "F" || car.prevCarKind str[startsWith] "YF") && (car.prevCarKind not str[startsWith] "FI" && car.prevCarKind not str[startsWith] "FA" && car.prevCarKind not str[startsWith] "FW" && car.prevCarKind not str[startsWith] "FB") && (car.prevCarKind != "YFB"))) || ((car.nextSchi not contains "N2" && car.nextSchi not contains "N1") && (car.nextLoadEmpty == "L") && ((car.nextCarKind str[startsWith] "F" || car.nextCarKind str[startsWith] "YF") && (car.nextCarKind not str[startsWith] "FA" && car.nextCarKind not str[startsWith] "FB" && car.nextCarKind not str[startsWith] "FI" && car.nextCarKind not str[startsWith] "FW") && (car.nextCarKind != "Y" || car.nextCarKind != "YFB"))))
If we are to split it as different rules to find if the rule was satisfied because of( prevCarKind , prevSchi , prevLoadEmpty) or (nextCarKind, nextSchi,nextLoadEmpty) it would be too hard to split the complex rule.
I have also given the rule condition as image took from our UI application.
Pictorial view of above rule condition string
Would be helpful if someone can let us know on how to find if the above is satisfied based on which condition.
Regards,
Madhankumar. B
Thanks,
Madhan
drools
add a comment |
In drool we have any option to find what all condition tuples satisfied in a rule, when I execute a stateless session with fact.
ex: if we have rule condition in a rule RUL1,
car.schi == 'A' || car.carKind str[startsWith] 'A'
if RUL1 is satisfied because of car.schi, then do we have any API where I can get this info(car.schi).
The example what I given was simpler but our actual business rule was so complex as shown below,
(car.carKind != "EZZ" && car.carKind != "ENG" && car.carKind != "ETD") && ((car.schi contains "N1" || car.schi contains "N2") || ((car.schi contains "IH" || car.schi contains "N4" || car.schi contains "OM" || car.schi contains "DA" || car.schi contains "N5" || car.schi contains "PA" || car.schi contains "FG" || car.schi contains "PL" || car.schi contains "PC" || car.schi contains "PO" || car.schi contains "NG" || car.schi contains "OX" || car.schi contains "OP" || car.schi contains "NS" || car.schi contains "FS" || car.schi contains "FL" || car.schi contains "N3" || car.schi contains "CM" || car.schi contains "DW" || car.schi contains "PB") && (validateElementRule($trainrulesRequestDTO.getElementRuleMap(),"1_N",true,$trainrulesRequestDTO.getCar().getCarNumb())))) && (((car.prevSchi not contains "N2" && car.prevSchi not contains "N1") && (car.prevLoadEmpty == "L") && ((car.prevCarKind str[startsWith] "F" || car.prevCarKind str[startsWith] "YF") && (car.prevCarKind not str[startsWith] "FI" && car.prevCarKind not str[startsWith] "FA" && car.prevCarKind not str[startsWith] "FW" && car.prevCarKind not str[startsWith] "FB") && (car.prevCarKind != "YFB"))) || ((car.nextSchi not contains "N2" && car.nextSchi not contains "N1") && (car.nextLoadEmpty == "L") && ((car.nextCarKind str[startsWith] "F" || car.nextCarKind str[startsWith] "YF") && (car.nextCarKind not str[startsWith] "FA" && car.nextCarKind not str[startsWith] "FB" && car.nextCarKind not str[startsWith] "FI" && car.nextCarKind not str[startsWith] "FW") && (car.nextCarKind != "Y" || car.nextCarKind != "YFB"))))
If we are to split it as different rules to find if the rule was satisfied because of( prevCarKind , prevSchi , prevLoadEmpty) or (nextCarKind, nextSchi,nextLoadEmpty) it would be too hard to split the complex rule.
I have also given the rule condition as image took from our UI application.
Pictorial view of above rule condition string
Would be helpful if someone can let us know on how to find if the above is satisfied based on which condition.
Regards,
Madhankumar. B
Thanks,
Madhan
drools
add a comment |
In drool we have any option to find what all condition tuples satisfied in a rule, when I execute a stateless session with fact.
ex: if we have rule condition in a rule RUL1,
car.schi == 'A' || car.carKind str[startsWith] 'A'
if RUL1 is satisfied because of car.schi, then do we have any API where I can get this info(car.schi).
The example what I given was simpler but our actual business rule was so complex as shown below,
(car.carKind != "EZZ" && car.carKind != "ENG" && car.carKind != "ETD") && ((car.schi contains "N1" || car.schi contains "N2") || ((car.schi contains "IH" || car.schi contains "N4" || car.schi contains "OM" || car.schi contains "DA" || car.schi contains "N5" || car.schi contains "PA" || car.schi contains "FG" || car.schi contains "PL" || car.schi contains "PC" || car.schi contains "PO" || car.schi contains "NG" || car.schi contains "OX" || car.schi contains "OP" || car.schi contains "NS" || car.schi contains "FS" || car.schi contains "FL" || car.schi contains "N3" || car.schi contains "CM" || car.schi contains "DW" || car.schi contains "PB") && (validateElementRule($trainrulesRequestDTO.getElementRuleMap(),"1_N",true,$trainrulesRequestDTO.getCar().getCarNumb())))) && (((car.prevSchi not contains "N2" && car.prevSchi not contains "N1") && (car.prevLoadEmpty == "L") && ((car.prevCarKind str[startsWith] "F" || car.prevCarKind str[startsWith] "YF") && (car.prevCarKind not str[startsWith] "FI" && car.prevCarKind not str[startsWith] "FA" && car.prevCarKind not str[startsWith] "FW" && car.prevCarKind not str[startsWith] "FB") && (car.prevCarKind != "YFB"))) || ((car.nextSchi not contains "N2" && car.nextSchi not contains "N1") && (car.nextLoadEmpty == "L") && ((car.nextCarKind str[startsWith] "F" || car.nextCarKind str[startsWith] "YF") && (car.nextCarKind not str[startsWith] "FA" && car.nextCarKind not str[startsWith] "FB" && car.nextCarKind not str[startsWith] "FI" && car.nextCarKind not str[startsWith] "FW") && (car.nextCarKind != "Y" || car.nextCarKind != "YFB"))))
If we are to split it as different rules to find if the rule was satisfied because of( prevCarKind , prevSchi , prevLoadEmpty) or (nextCarKind, nextSchi,nextLoadEmpty) it would be too hard to split the complex rule.
I have also given the rule condition as image took from our UI application.
Pictorial view of above rule condition string
Would be helpful if someone can let us know on how to find if the above is satisfied based on which condition.
Regards,
Madhankumar. B
Thanks,
Madhan
drools
In drool we have any option to find what all condition tuples satisfied in a rule, when I execute a stateless session with fact.
ex: if we have rule condition in a rule RUL1,
car.schi == 'A' || car.carKind str[startsWith] 'A'
if RUL1 is satisfied because of car.schi, then do we have any API where I can get this info(car.schi).
The example what I given was simpler but our actual business rule was so complex as shown below,
(car.carKind != "EZZ" && car.carKind != "ENG" && car.carKind != "ETD") && ((car.schi contains "N1" || car.schi contains "N2") || ((car.schi contains "IH" || car.schi contains "N4" || car.schi contains "OM" || car.schi contains "DA" || car.schi contains "N5" || car.schi contains "PA" || car.schi contains "FG" || car.schi contains "PL" || car.schi contains "PC" || car.schi contains "PO" || car.schi contains "NG" || car.schi contains "OX" || car.schi contains "OP" || car.schi contains "NS" || car.schi contains "FS" || car.schi contains "FL" || car.schi contains "N3" || car.schi contains "CM" || car.schi contains "DW" || car.schi contains "PB") && (validateElementRule($trainrulesRequestDTO.getElementRuleMap(),"1_N",true,$trainrulesRequestDTO.getCar().getCarNumb())))) && (((car.prevSchi not contains "N2" && car.prevSchi not contains "N1") && (car.prevLoadEmpty == "L") && ((car.prevCarKind str[startsWith] "F" || car.prevCarKind str[startsWith] "YF") && (car.prevCarKind not str[startsWith] "FI" && car.prevCarKind not str[startsWith] "FA" && car.prevCarKind not str[startsWith] "FW" && car.prevCarKind not str[startsWith] "FB") && (car.prevCarKind != "YFB"))) || ((car.nextSchi not contains "N2" && car.nextSchi not contains "N1") && (car.nextLoadEmpty == "L") && ((car.nextCarKind str[startsWith] "F" || car.nextCarKind str[startsWith] "YF") && (car.nextCarKind not str[startsWith] "FA" && car.nextCarKind not str[startsWith] "FB" && car.nextCarKind not str[startsWith] "FI" && car.nextCarKind not str[startsWith] "FW") && (car.nextCarKind != "Y" || car.nextCarKind != "YFB"))))
If we are to split it as different rules to find if the rule was satisfied because of( prevCarKind , prevSchi , prevLoadEmpty) or (nextCarKind, nextSchi,nextLoadEmpty) it would be too hard to split the complex rule.
I have also given the rule condition as image took from our UI application.
Pictorial view of above rule condition string
Would be helpful if someone can let us know on how to find if the above is satisfied based on which condition.
Regards,
Madhankumar. B
Thanks,
Madhan
drools
drools
edited Nov 30 '18 at 10:25
asked Nov 21 '18 at 11:37
GoldenEagles
12
12
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
No you can't. But you could split the rule into multiple rules like this:
rule "RUL1A"
when
car.schi == 'A'
then
...
end
rule "RUL1B"
when
car.carKind[0] == 'A'
then
...
end
Thanks for the reply. The condition what I gave earlier was simpler one but our actual business rule condition are so complex that we cannot split it as different rules as you said. To give a feel of the condition complexity I have provided you the actual business condition string in question section. Also pictorial form of that condition string is also attached for your better understanding. Due to high complexity of the rule condition we cannot split the condition as multiple rules. Is there any other option where we can get exact tuples matched in rule condition.
– GoldenEagles
Nov 30 '18 at 10:32
I created a new answer with another option.
– Master Drools
Dec 1 '18 at 17:18
Thanks for the reply. The approach what you shared helped us to resolve our issue.
– GoldenEagles
Dec 7 '18 at 7:52
I'm glad that I could prove helpful. Would you mind marking the most helpful answer as accepted: stackoverflow.com/help/someone-answers
– Master Drools
Dec 8 '18 at 10:57
add a comment |
You could split your condtion into several functions (and define them in drl):
function boolean isKindEzzEngEtd(Car car) {
return car.carKind in ["EZZ", "ENG", "ETD"];
}
function boolean isSchiContainsN1N2(Car car) {
return (car.schi contains "N1" || car.schi contains "N2");
}
...
then use the functions inside your rules (it also improves readablility and re-use):
rule "RUL1"
when
$car: Car()
!isKindEzzEngEtd($car) || isSchiContainsN1N2($car) && ...
then
-- call the functions one by one to find out which one returned true:
System.out.println("NOT isKindEzzEngEtd: " + !isKindEzzEngEtd($car));
System.out.println("isSchiContainsN1N2: " + isSchiContainsN1N2($car));
end
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53411245%2fto-find-what-all-condition-element-is-true-in-a-rule%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
No you can't. But you could split the rule into multiple rules like this:
rule "RUL1A"
when
car.schi == 'A'
then
...
end
rule "RUL1B"
when
car.carKind[0] == 'A'
then
...
end
Thanks for the reply. The condition what I gave earlier was simpler one but our actual business rule condition are so complex that we cannot split it as different rules as you said. To give a feel of the condition complexity I have provided you the actual business condition string in question section. Also pictorial form of that condition string is also attached for your better understanding. Due to high complexity of the rule condition we cannot split the condition as multiple rules. Is there any other option where we can get exact tuples matched in rule condition.
– GoldenEagles
Nov 30 '18 at 10:32
I created a new answer with another option.
– Master Drools
Dec 1 '18 at 17:18
Thanks for the reply. The approach what you shared helped us to resolve our issue.
– GoldenEagles
Dec 7 '18 at 7:52
I'm glad that I could prove helpful. Would you mind marking the most helpful answer as accepted: stackoverflow.com/help/someone-answers
– Master Drools
Dec 8 '18 at 10:57
add a comment |
No you can't. But you could split the rule into multiple rules like this:
rule "RUL1A"
when
car.schi == 'A'
then
...
end
rule "RUL1B"
when
car.carKind[0] == 'A'
then
...
end
Thanks for the reply. The condition what I gave earlier was simpler one but our actual business rule condition are so complex that we cannot split it as different rules as you said. To give a feel of the condition complexity I have provided you the actual business condition string in question section. Also pictorial form of that condition string is also attached for your better understanding. Due to high complexity of the rule condition we cannot split the condition as multiple rules. Is there any other option where we can get exact tuples matched in rule condition.
– GoldenEagles
Nov 30 '18 at 10:32
I created a new answer with another option.
– Master Drools
Dec 1 '18 at 17:18
Thanks for the reply. The approach what you shared helped us to resolve our issue.
– GoldenEagles
Dec 7 '18 at 7:52
I'm glad that I could prove helpful. Would you mind marking the most helpful answer as accepted: stackoverflow.com/help/someone-answers
– Master Drools
Dec 8 '18 at 10:57
add a comment |
No you can't. But you could split the rule into multiple rules like this:
rule "RUL1A"
when
car.schi == 'A'
then
...
end
rule "RUL1B"
when
car.carKind[0] == 'A'
then
...
end
No you can't. But you could split the rule into multiple rules like this:
rule "RUL1A"
when
car.schi == 'A'
then
...
end
rule "RUL1B"
when
car.carKind[0] == 'A'
then
...
end
answered Nov 29 '18 at 18:37
Master Drools
568312
568312
Thanks for the reply. The condition what I gave earlier was simpler one but our actual business rule condition are so complex that we cannot split it as different rules as you said. To give a feel of the condition complexity I have provided you the actual business condition string in question section. Also pictorial form of that condition string is also attached for your better understanding. Due to high complexity of the rule condition we cannot split the condition as multiple rules. Is there any other option where we can get exact tuples matched in rule condition.
– GoldenEagles
Nov 30 '18 at 10:32
I created a new answer with another option.
– Master Drools
Dec 1 '18 at 17:18
Thanks for the reply. The approach what you shared helped us to resolve our issue.
– GoldenEagles
Dec 7 '18 at 7:52
I'm glad that I could prove helpful. Would you mind marking the most helpful answer as accepted: stackoverflow.com/help/someone-answers
– Master Drools
Dec 8 '18 at 10:57
add a comment |
Thanks for the reply. The condition what I gave earlier was simpler one but our actual business rule condition are so complex that we cannot split it as different rules as you said. To give a feel of the condition complexity I have provided you the actual business condition string in question section. Also pictorial form of that condition string is also attached for your better understanding. Due to high complexity of the rule condition we cannot split the condition as multiple rules. Is there any other option where we can get exact tuples matched in rule condition.
– GoldenEagles
Nov 30 '18 at 10:32
I created a new answer with another option.
– Master Drools
Dec 1 '18 at 17:18
Thanks for the reply. The approach what you shared helped us to resolve our issue.
– GoldenEagles
Dec 7 '18 at 7:52
I'm glad that I could prove helpful. Would you mind marking the most helpful answer as accepted: stackoverflow.com/help/someone-answers
– Master Drools
Dec 8 '18 at 10:57
Thanks for the reply. The condition what I gave earlier was simpler one but our actual business rule condition are so complex that we cannot split it as different rules as you said. To give a feel of the condition complexity I have provided you the actual business condition string in question section. Also pictorial form of that condition string is also attached for your better understanding. Due to high complexity of the rule condition we cannot split the condition as multiple rules. Is there any other option where we can get exact tuples matched in rule condition.
– GoldenEagles
Nov 30 '18 at 10:32
Thanks for the reply. The condition what I gave earlier was simpler one but our actual business rule condition are so complex that we cannot split it as different rules as you said. To give a feel of the condition complexity I have provided you the actual business condition string in question section. Also pictorial form of that condition string is also attached for your better understanding. Due to high complexity of the rule condition we cannot split the condition as multiple rules. Is there any other option where we can get exact tuples matched in rule condition.
– GoldenEagles
Nov 30 '18 at 10:32
I created a new answer with another option.
– Master Drools
Dec 1 '18 at 17:18
I created a new answer with another option.
– Master Drools
Dec 1 '18 at 17:18
Thanks for the reply. The approach what you shared helped us to resolve our issue.
– GoldenEagles
Dec 7 '18 at 7:52
Thanks for the reply. The approach what you shared helped us to resolve our issue.
– GoldenEagles
Dec 7 '18 at 7:52
I'm glad that I could prove helpful. Would you mind marking the most helpful answer as accepted: stackoverflow.com/help/someone-answers
– Master Drools
Dec 8 '18 at 10:57
I'm glad that I could prove helpful. Would you mind marking the most helpful answer as accepted: stackoverflow.com/help/someone-answers
– Master Drools
Dec 8 '18 at 10:57
add a comment |
You could split your condtion into several functions (and define them in drl):
function boolean isKindEzzEngEtd(Car car) {
return car.carKind in ["EZZ", "ENG", "ETD"];
}
function boolean isSchiContainsN1N2(Car car) {
return (car.schi contains "N1" || car.schi contains "N2");
}
...
then use the functions inside your rules (it also improves readablility and re-use):
rule "RUL1"
when
$car: Car()
!isKindEzzEngEtd($car) || isSchiContainsN1N2($car) && ...
then
-- call the functions one by one to find out which one returned true:
System.out.println("NOT isKindEzzEngEtd: " + !isKindEzzEngEtd($car));
System.out.println("isSchiContainsN1N2: " + isSchiContainsN1N2($car));
end
add a comment |
You could split your condtion into several functions (and define them in drl):
function boolean isKindEzzEngEtd(Car car) {
return car.carKind in ["EZZ", "ENG", "ETD"];
}
function boolean isSchiContainsN1N2(Car car) {
return (car.schi contains "N1" || car.schi contains "N2");
}
...
then use the functions inside your rules (it also improves readablility and re-use):
rule "RUL1"
when
$car: Car()
!isKindEzzEngEtd($car) || isSchiContainsN1N2($car) && ...
then
-- call the functions one by one to find out which one returned true:
System.out.println("NOT isKindEzzEngEtd: " + !isKindEzzEngEtd($car));
System.out.println("isSchiContainsN1N2: " + isSchiContainsN1N2($car));
end
add a comment |
You could split your condtion into several functions (and define them in drl):
function boolean isKindEzzEngEtd(Car car) {
return car.carKind in ["EZZ", "ENG", "ETD"];
}
function boolean isSchiContainsN1N2(Car car) {
return (car.schi contains "N1" || car.schi contains "N2");
}
...
then use the functions inside your rules (it also improves readablility and re-use):
rule "RUL1"
when
$car: Car()
!isKindEzzEngEtd($car) || isSchiContainsN1N2($car) && ...
then
-- call the functions one by one to find out which one returned true:
System.out.println("NOT isKindEzzEngEtd: " + !isKindEzzEngEtd($car));
System.out.println("isSchiContainsN1N2: " + isSchiContainsN1N2($car));
end
You could split your condtion into several functions (and define them in drl):
function boolean isKindEzzEngEtd(Car car) {
return car.carKind in ["EZZ", "ENG", "ETD"];
}
function boolean isSchiContainsN1N2(Car car) {
return (car.schi contains "N1" || car.schi contains "N2");
}
...
then use the functions inside your rules (it also improves readablility and re-use):
rule "RUL1"
when
$car: Car()
!isKindEzzEngEtd($car) || isSchiContainsN1N2($car) && ...
then
-- call the functions one by one to find out which one returned true:
System.out.println("NOT isKindEzzEngEtd: " + !isKindEzzEngEtd($car));
System.out.println("isSchiContainsN1N2: " + isSchiContainsN1N2($car));
end
answered Dec 1 '18 at 17:18
Master Drools
568312
568312
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53411245%2fto-find-what-all-condition-element-is-true-in-a-rule%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown