//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------

(function() {
var ary = new Array(10);
var obj0 = new Object();
var a;
var b;
var c;
var d;
var e;
var f;
var g;
var h;
a = -53996;
b = 691;
c = 16781;
d = 42436;
e = 4464;
f = 5860;
g = 64234;
h = -48172;
obj0.a = 59797;
obj0.b = 27186;
obj0.c = -60115;
obj0.d = 65524;
obj0.e = -12299;
ary[0] = 16240;
ary[1] = 2826;
ary[100] = 57847;
obj0.b = obj0.b;
if(((((- -30584) != (b + -46237)) - 18831) > (obj0.c * (-41869 * (-12963 - -53877))))) {
  if(((((59321 ? c : 57128) & (-18692 ^ 13317)) * ((-57309 ? -61294 : 26071) * (-10839 == -6652))) <= ((obj0.b++ ) ^ ((obj0.d & 54611) ^ (-23850 ^ 51945))))) {
  } else {
    c = ((((-3925 ^ a) & (e > -60176)) * obj0.e) < (((-43395 ? 14605 : 62754) & b) | (-59998 | (5987 > f))));
    if(((d * d) > ((g & 23105) * ((+ 63131) | obj0.c)))) {
      a = d;
      obj0.c = obj0.c;
      e = ((obj0.a - (obj0.c | 62290)) & (((-14773 ? g : d) >= (a ^ h)) ^ h));
    } else {
    }
    if((((obj0.b | (obj0.b & e)) * -29106) < (15672 + a))) {
    } else {
      obj0.c = a;
      obj0.b = ((h * -51559) > (obj0.c ^ d));
    }
  }
} else {
}
h = (- ((- (obj0.b - obj0.c)) - d));
e = b;
WScript.Echo("a = " + (a>>3));
WScript.Echo("b = " + (b>>3));
WScript.Echo("c = " + (c>>3));
WScript.Echo("d = " + (d>>3));
WScript.Echo("e = " + (e>>3));
WScript.Echo("f = " + (f>>3));
WScript.Echo("g = " + (g>>3));
WScript.Echo("h = " + (h>>3));
WScript.Echo("obj0.a = " + (obj0.a>>3));
WScript.Echo("obj0.b = " + (obj0.b>>3));
WScript.Echo("obj0.c = " + (obj0.c>>3));
WScript.Echo("obj0.d = " + (obj0.d>>3));
WScript.Echo("obj0.e = " + (obj0.e>>3));
WScript.Echo("ary[0] = " + (ary[0]>>3));
WScript.Echo("ary[1] = " + (ary[1]>>3));
WScript.Echo("ary[100] = " + (ary[100]>>3));
WScript.Echo('done');
})();
