//-------------------------------------------------------------------------------------------------------
// 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 = -25582;
b = 35882;
c = 32235;
d = -38515;
e = -25689;
f = -26162;
g = 13372;
h = -4275;
obj0.a = 30211;
obj0.b = -55941;
obj0.c = 10448;
obj0.d = 27217;
obj0.e = 50786;
ary[0] = 5188;
ary[1] = -51571;
ary[100] = -29295;
if((((g - obj0.a) - b) != (((e <= -19777) ? (f | obj0.b) : (++ b)) | ((d + -1494) ^ (g ^ obj0.b))))) {
  if(((((obj0.b & 53781) == h) - ((obj0.d * 44724) <= obj0.d)) > ((25766 == (obj0.a * obj0.b)) * ((obj0.b <= -36350) & e)))) {
    if(((((11687 ^ obj0.c) ^ (+ obj0.d)) + (- (-63317 - h))) == (obj0.d ^ ((b & 28071) - obj0.e)))) {
      d = -5491;
      f = obj0.e;
    } else {
    }
    if(((((-1945 * -30403) - (16451 & 61851)) * (obj0.a & (g ? f : -5484))) >= ((- (-2499 ^ obj0.e)) ^ e))) {
      d = ((h - (d | h)) - ((obj0.a > (+ c)) | g));
      obj0.c = -43692;
      f = (((e | -58868) ^ ((50992 ? b : g) | (-258 + -55137))) + ((obj0.b ^ e) + (+ g)));
    } else {
    }
  } else {
    e = ((((obj0.e > 54827) ? (-28518 ? -23316 : -21688) : (36005 + -54809)) & -64657) + (obj0.c * 29624));
  }
  if((((obj0.b ^ f) * (60111 ^ (-48639 + obj0.e))) <= (((37164 <= obj0.e) * a) ^ ((-15855 + b) | (c ? 14392 : -26175))))) {
  } else {
    if(((((-17883 & d) - b) + d) <= (obj0.a & ((-60343 + b) >= (13281 <= 8372))))) {
      obj0.b = ((((d == 12923) * (b | 43763)) * (obj0.b | (-11707 * h))) + (g * ((-49823 * 32509) ^ d)));
      obj0.b = (a++ );
      a = ((((48665 >= -48058) ? c : (-46718 | e)) | -18662) & (((20672 | -32663) == b) | ((a - b) + (5427 == a))));
    } else {
      c = obj0.a;
    }
    obj0.b = ((h + obj0.b) | (d | ((d + -6586) != (62951 <= f))));
  }
  if(((((obj0.d == obj0.b) < (obj0.a > -18730)) - (obj0.b | (obj0.b <= -55177))) <= (d * -49967))) {
    if(((((g < obj0.b) & (-14535 - -5365)) * (e++ )) >= (g + ((-59299 == b) ? obj0.c : (31933 ? h : 50124))))) {
      c = ((f + ((a - -6981) * c)) + (b | f));
      c = obj0.b;
      c = c;
    } else {
    }
    if(((((d <= h) - (obj0.c | -7788)) * ((d - 42696) * 913)) > ((obj0.a | (obj0.d + -15298)) | b))) {
      obj0.e = ((d - f) != (f - ((obj0.b <= obj0.e) ^ c)));
      c = obj0.c;
    } else {
      d = ((obj0.c * d) + (((-9382 == d) & (22533 ? 51236 : 16040)) | (+ (h != -37391))));
    }
  } else {
  }
} else {
}
if(((((g | 9364) - (-8241 | f)) ^ (a + h)) <= (((c ^ 7851) >= (! -60275)) * (-5519 ^ (+ e))))) {
} else {
  if(((((obj0.b <= obj0.d) ? obj0.b : (49217 | 42899)) & f) >= (g | ((+ g) & (h + obj0.b))))) {
  } else {
    obj0.b = -40608;
    e = ((((a - b) - (17171 - 21777)) | f) & (h + (-30772 & f)));
    obj0.a = ((obj0.e & obj0.a) * (d ^ a));
  }
}
if(((((f >= obj0.d) ? (obj0.d + obj0.d) : c) + ((-62825 & 8777) > a)) > (h | (6404 | (obj0.d + h))))) {
  obj0.d = (((+ e) * ((b < -9777) ? (44898 ? obj0.b : 24414) : (h & 41194))) * ((+ b) - ((54251 | 17135) ^ (-12725 - a))));
  h = ((((11611 | -45706) & g) - ((53471 + d) <= (+ 26969))) - ((24961 * (h + d)) + obj0.e));
} else {
}
obj0.a = ((((d++ ) >= (b++ )) * obj0.b) ^ ((g * (b & -55758)) | (obj0.d | (c | -47807))));
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');
})();
