//-------------------------------------------------------------------------------------------------------
// 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 = -10910;
b = -54655;
c = 46900;
d = -12929;
e = -1704;
f = 33204;
g = 57203;
h = -59808;
obj0.a = 46102;
obj0.b = -21767;
obj0.c = 39168;
obj0.d = 48569;
obj0.e = -36552;
ary[0] = 26642;
ary[1] = -18660;
ary[100] = -46161;
if(((obj0.d - ((- 54726) * obj0.c)) != (-53568 | obj0.d))) {
  if(((27323 - ((g * c) == (45012 ^ obj0.c))) == ((-60651 ^ f) | b))) {
    g = (((+ -7777) - h) ? ((+ (- d)) - f) : (((1599 <= -13256) < (e - obj0.d)) & ((a ? -55133 : 23540) & (obj0.c ? -62285 : 44951))));
    e = ((((52317 * 14601) ^ b) ^ a) - (((obj0.b < obj0.a) ? (29646 - e) : (obj0.b * -30100)) ^ obj0.d));
    obj0.d = obj0.d;
  } else {
  }
  e = d;
} else {
  if((((-38163 - h) ^ -46278) < (((obj0.a & f) * (f <= g)) ^ (+ (16002 - c))))) {
    if(((((60771 + 20651) & (e ^ -56566)) | a) > ((d * obj0.d) & g))) {
    } else {
    }
  } else {
    if(((d ^ (f >= (obj0.a | b))) < ((obj0.b & (-16765 * e)) * e))) {
      h = ((obj0.c + (- (d ? 37816 : 50345))) ^ ((8832 ^ obj0.c) | ((h * -53404) == (h ^ obj0.a))));
    } else {
      obj0.c = -8703;
    }
    if(((((obj0.e - obj0.e) ^ (-17039 > c)) - h) >= (((++ obj0.c) + (b < obj0.e)) ^ d))) {
      g = ((g - (f ^ (obj0.d ^ a))) > (e | g));
    } else {
      b = ((((obj0.e ? obj0.b : obj0.a) & (-62709 & d)) * obj0.a) ? (((obj0.b - 25431) | obj0.d) * ((a ^ 13209) < e)) : ((obj0.d & c) - ((- c) * (61623 - -19582))));
    }
  }
  obj0.c = ((-6492 & ((-49981 - c) * c)) ^ (h | (obj0.d - c)));
}
if((((b++ ) * ((b <= 35409) ? obj0.c : (+ -16080))) < (obj0.d & ((9495 + -5610) | (50471 | 6102))))) {
  d = ((d | obj0.c) ? (b & ((-46044 ^ obj0.c) - e)) : (((-63903 < -21179) ? obj0.b : e) - (a & (36894 & b))));
} else {
  obj0.a = (obj0.b++ );
}
if(((e - ((obj0.e & 43901) & (++ obj0.a))) < (c + (21910 - (-2715 + h))))) {
} else {
  if(((((obj0.b & -27371) <= (obj0.d < e)) + obj0.a) >= (b * (obj0.a++ )))) {
  } else {
    if((((b * (obj0.a++ )) ^ ((g & obj0.d) - e)) <= (((-25056 - 15322) + (obj0.d * a)) | (e == (11856 | b))))) {
    } else {
      obj0.a = ((((g ? -63789 : 13829) | (49151 ^ -3385)) | ((-15650 ^ f) | (+ -4149))) & (((20823 & 44434) - (-36781 + d)) | 54259));
      obj0.c = ((d & ((obj0.d++ ) * d)) ? ((g ^ obj0.c) - b) : (-65019 - (e > (13687 ^ 62666))));
      obj0.b = f;
    }
  }
  b = obj0.e;
}
obj0.e = ((f & ((42781 & 13749) != obj0.a)) * (-16941 & d));
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');
})();
