//-------------------------------------------------------------------------------------------------------
// 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 = 14029;
b = 43960;
c = 16464;
d = -14962;
e = 53300;
f = -691;
g = 58086;
h = -62390;
obj0.a = 9695;
obj0.b = -52333;
obj0.c = -35365;
obj0.d = 20931;
obj0.e = 34010;
ary[0] = 839;
ary[1] = 19859;
ary[100] = -54337;
b = -2076;
if(((obj0.b - (24945 & (a ^ 55871))) > ((obj0.b > (-18767 ? obj0.d : 3062)) & obj0.e))) {
} else {
  if(((((-55743 & 61017) * (29254 >= h)) + ((d < -46530) ? (6253 | 2) : obj0.d)) < (f | ((-61959 == obj0.a) ? 12561 : (g ^ 47033))))) {
    c = (((36047 & (++ f)) ^ ((-52443 <= d) - (-56491 & h))) > (obj0.a + ((-34572 + e) - (d & obj0.d))));
  } else {
    obj0.c = (((b * (58885 & -32483)) ^ f) | ((obj0.b ^ (! e)) & (+ (63710 >= obj0.e))));
  }
  c = ((((g - 10069) & -20232) + ((h != h) ? (63483 - 46471) : obj0.e)) * (((52658 - e) + (- -43341)) ^ a));
}
c = ((g ^ ((d == -18074) ? (obj0.c * g) : (a <= -8574))) | (obj0.d ^ ((32048 + -7283) > (++ g))));
if(((((-48456 != e) - (++ d)) & 16465) < (((-17463 * c) - obj0.d) + c))) {
  f = obj0.a;
  obj0.b = ((((e & b) + obj0.a) | obj0.a) == ((f ^ (! c)) - ((54429 <= obj0.b) + (- -20711))));
  if(((((25230 ? e : e) + (40819 + g)) & ((+ -41317) & (47354 ^ a))) != (41301 | obj0.a))) {
    if(((((+ c) & (obj0.d ^ -43022)) ^ obj0.a) < (a | e))) {
    } else {
      obj0.d = ((((5026 + b) + h) - (+ -19547)) ^ (((h ? g : c) | (-40448 <= obj0.b)) | obj0.b));
      obj0.e = 41178;
      obj0.b = ((d & ((-24061 & c) & g)) == (a - 28178));
    }
    if((((h - (h++ )) | ((! 42253) * f)) < (g - d))) {
      obj0.e = d;
    } else {
    }
  } else {
    if((((e * (1238 ^ 2052)) - obj0.c) != ((++ b) | -9540))) {
    } else {
      d = ((((obj0.e & -50960) - (obj0.d < obj0.d)) & (obj0.b * obj0.d)) | (obj0.a ^ (obj0.e != obj0.c)));
      a = (((e ^ (-43117 | g)) - -25993) - (obj0.c & ((obj0.b ^ -25360) * (d & g))));
      h = (+ (((obj0.c <= 21836) == (-51890 | 4613)) - ((+ b) == (++ d))));
    }
    obj0.d = ((-22843 + ((g | obj0.e) & (a >= 36613))) | (b | ((21023 + obj0.b) <= e)));
    obj0.a = (((g & (f + obj0.e)) + f) >= (obj0.d | d));
  }
} else {
  if(((((-28948 - g) + (-21728 & f)) ^ -29776) == ((obj0.a > (h * obj0.b)) * (19653 < (-26994 ^ b))))) {
    if(((c + h) <= ((obj0.e++ ) | ((e <= g) > (obj0.b != 3393))))) {
      obj0.e = (((d >= (6082 ? obj0.b : b)) + ((obj0.d ^ -55937) > (-11517 - d))) ? (f ^ obj0.a) : ((-50899 <= d) ^ ((-58847 & 6402) & (h & -63054))));
    } else {
      obj0.a = (((f != h) | ((h & -44413) * (a * d))) * (g & g));
      obj0.a = ((a | ((31341 * h) * (obj0.e ^ 1801))) & (e + obj0.e));
      obj0.c = ((d * c) ^ (((-9829 >= e) ^ b) ^ a));
    }
    if(((((-60452 | -45534) + -1837) ^ (obj0.c & (g > a))) > ((obj0.a * (28342 | 61842)) * (e * (-55719 | 29870))))) {
    } else {
    }
    f = (((! (-18796 & 47888)) | ((e <= 11085) - (c | -19968))) ? (g | d) : (((++ c) - obj0.e) - (obj0.b | (obj0.d - obj0.a))));
  } else {
    a = e;
    obj0.b = (((+ (d & obj0.e)) * (f | (-32937 ^ a))) ? ((g + (! obj0.c)) * ((d + h) + f)) : (((36934 ^ -64966) < (20391 ^ -39003)) * obj0.d));
  }
  h = ((a ^ a) & ((++ b) ^ h));
  obj0.d = -42217;
}
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');
})();
