C&C:TA CnC-Eco

Sammelt Informationen ueber Basenausbau der Allianzmitglieder (basierend auf Skripte / Routinen von neobsen, JimBeamJD, KRS_L, F.D, und Dooki)

// ==UserScript==
// @name          C&C:TA CnC-Eco
// @version       1.2.0
// @namespace     http://cnc-eco.herokuapp.com
// @homepage      http://cnc-eco.herokuapp.com
// @description   Sammelt Informationen ueber Basenausbau der Allianzmitglieder (basierend auf Skripte / Routinen von neobsen, JimBeamJD, KRS_L, F.D, und Dooki)
// @author        F.D, J.L.
// @include       http*://*.alliances.commandandconquer.com/*/index.aspx*
// @icon          https://cnc-eco.herokuapp.com/favicon.ico
// @copyright     2018, J.L.
// @grant         GM_setValue
// @grant         GM_getValue
// @grant         GM_registerMenuCommand
// @grant         GM_xmlhttpRequest
// @grant         GM_updatingEnabled
// @grant         unsafeWindow
// @license       CC BY-NC-SA 4.0 - http://creativecommons.org/licenses/by-nc-sa/4.0/
// ==/UserScript==

(function() {
    var CncEco_mainFunction = function() {
            function Y() {
                var l = {};
                Array.isarray ||
                    (Array.isarray = function(c) {
                        return c instanceof Array ? !0 : !1;
                    });
                Object.isobj ||
                    (Object.isobj = function(c) {
                        return c instanceof Object && !0 !== c instanceof Array ? !0 : !1;
                    });
                JSON.isjson ||
                    (JSON.isjson = function(c) {
                        try {
                            return JSON.parse(c), 'parse';
                        } catch (f) {
                            try {
                                return JSON.stringify(c), 'stringify';
                            } catch (b) {
                                return !1;
                            }
                        }
                    });
                qx.Class.define('CncEcomain', {
                    type: 'singleton',
                    extend: qx.core.Object,
                    construct: function() {
                        this.mainMenuContent = new qx.ui.menu.Menu();
                        this.mainMenuButton = new qx.ui.form.MenuButton(
                            'CncEco',
                            null,
                            this.mainMenuContent
                        );
                        this.mainMenuButton.set({
                            width: 70,
                            appearance: 'button-bar-right',
                            toolTipText: 'List of MemberStatsCommands',
                        });
                        this.mainMenuButton.addListener(
                            'execute',
                            function(b) {
                                this.mainMenuContent.open();
                            },
                            this
                        );
                        for (
                            var c = qx.core.Init.getApplication().getUIItem(
                                    ClientLib.Data.Missions.PATH.BAR_MENU
                                ),
                                f = c.getChildren()[1].getChildren(),
                                b = f.length - 1;
                            0 <= b;
                            b--
                        )
                            'function' === typeof f[b].setAppearance &&
                                'button-bar-right' == f[b].getAppearance() &&
                                f[b].setAppearance('button-bar-center');
                        c.getChildren()[1].add(this.mainMenuButton);
                        c.getChildren()[0].setScale(!0);
                        c.getChildren()[0].setWidth(834);
                    },
                    members: {
                        mainMenuContent: null,
                        mainMenuButton: null,
                        poiwindow: null,
                        poiInfoWindow: null,
                        AddMainMenu: function(c, f, b) {
                            null === c
                                ? h('CncEco.AddSubMenu: name empty')
                                : null === f
                                ? h('CncEco.AddMainMenu: command empty')
                                : (null !== b
                                      ? ((b = new qx.ui.command.Command(b)),
                                        b.addListener('execute', f, this),
                                        (c = new qx.ui.menu.Button(c)),
                                        c.setCommand(b))
                                      : ((c = new qx.ui.menu.Button(c)),
                                        c.addListener('execute', f)),
                                  this.mainMenuContent.add(c));
                        },
                        AddSubMainMenu: function(c) {
                            if (null === c) h('Mest.AddSubMainMenu: name empty');
                            else {
                                var f = new qx.ui.menu.Menu();
                                c = new qx.ui.menu.Button(c, null, null, f);
                                this.mainMenuContent.add(c);
                                return f;
                            }
                        },
                        AddSubMenu: function(c, f, b, d) {
                            if (null === f) h('CncEco.AddSubMenu: name empty');
                            else if (null === b) h('CncEco.AddSubMenu: command empty');
                            else if (null === c) h('CncEco.AddSubMenu: subMenu empty');
                            else {
                                if (null !== d) {
                                    var g = new qx.ui.command.Command(d);
                                    g.addListener('execute', b, this);
                                    d = new qx.ui.menu.Button(f);
                                    d.setCommand(g);
                                } else (d = new qx.ui.menu.Button(f)), d.addListener('execute', b);
                                c.add(d);
                                c = new qx.ui.menu.Menu();
                                new qx.ui.menu.Button(f, null, null, c);
                                return c;
                            }
                        },
                        initialize: function() {
                            try {
                                var c = ClientLib.Data.MainData.GetInstance();
                                c.get_Player().get_Name();
                                c.get_Server().get_WorldId();
                                c.get_Alliance().get_Id();
                                addEventListener('keyup', this.onKey, !1);
                                h('init done');
                                CncEcomain.getInstance().doAtLogin();
                                CncEcomain.getInstance().doAfter();
                                Array.isArray ||
                                    (Array.isArray = function(c) {
                                        return (
                                            '[object Array]' === Object.prototype.toString.call(c)
                                        );
                                    });
                                Object.isObj ||
                                    (Object.isObj = function(c) {
                                        return (
                                            '[object Object]' === Object.prototype.toString.call(c)
                                        );
                                    });
                            } catch (f) {
                                h(f);
                            }
                        },
                        onKey: function(c) {
                            console.log(c);
                        },
                        doMenu: function() {
                            var c = CncEcomain.getInstance(),
                                f; //= c.AddSubMainMenu('MainOptions');
                            c.AddMainMenu('open CnCEco', function() {
                                CncEcomain.getInstance().openurl();
                            });
                            // c.AddMainMenu('send reports', function() {
                            //     CncEcoReports.getInstance().onAllReportsLoaded();
                            // });
                            c.AddMainMenu('add player', function() {
                                CncEcomain.getInstance().getToken();
                            });
                            c.AddMainMenu(
                                'update data',
                                function() {
                                    CncEcomain.getInstance().doAfter();
                                },
                                'Alt+y'
                            );
                            !0 ===
                                ClientLib.Data.MainData.GetInstance()
                                    .get_Alliance()
                                    .get_IsAdmin() &&
                            false && // todo remove false
                                ((f = c.AddSubMainMenu('State of War')),
                                c.AddSubMenu(
                                    f,
                                    'set State of War',
                                    function() {
                                        CncEcomain.getInstance().remoteRequest('stateofwar');
                                    },
                                    'Alt+p'
                                ),
                                c.AddSubMenu(
                                    f,
                                    'unset State of War',
                                    function() {
                                        CncEcomain.getInstance().remoteRequest('unsetstateofwar');
                                    },
                                    'Alt+o'
                                ));
                        },
                        doAtLogin: function() {
                            this.checkWar();
                            this.doMenu();
                            this.isPoiMinister();
                        },
                        doAfter: function() {
                            CncEcomain.getInstance().checkVersion();
                            CncEcomain.getInstance().PlayerUpdate();
                        },
                        checkWar: function() {
                            CncEcomain.getInstance().getIsWar();
                        },
                        checkVersion: function() {
                            CncEcomain.getInstance().remoteRequest('version');
                        },
                        openurl: function() {
                            CncEcomain.getInstance().remoteRequest('new_check');
                        },
                        getToken() {
                            CncEcomain.getInstance().remoteRequest('get_token');
                        },
                        askOtherButton: function() {
                            CncEcomain.getInstance().remoteRequest('button_check');
                        },
                        setSubstitution: function(c, f) {
                            CncEcomain.getInstance().substitutionXhr('set', f, c);
                        },
                        removeSubstitution: function(c, f) {
                            CncEcomain.getInstance().substitutionXhr('unset', c, f);
                        },
                        poiInfo: function() {
                            CncEcomain.getInstance()
                                .getWindow()
                                .open();
                            this.getWindow().push('Create PoiInfo\nplease wait\n\n');
                            CncEcomain.getInstance().getPoiInfo();
                        },
                        isPoiMinister: function() {
                            // h('check if poiminister i');
                            // CncEcomain.getInstance().remoteRequest('poiminister');
                        },
                        substitutionXhr: function(c, f, b) {
                            var d = ClientLib.Data.MainData.GetInstance()
                                    .get_Server()
                                    .get_WorldId(),
                                g = ClientLib.Net.CommunicationManager.GetInstance().get_InstanceId(),
                                n = new qx.bom.request.Xhr();
                            'set' == c &&
                                ((n.onload = function() {
                                    '0' == n.responseText && h('WarSubstitution is set!');
                                    '1' == n.responseText && h('WarSubstitution is Error!');
                                    if ('2' == n.responseText) {
                                        n.abort();
                                        h('substitution ist nicht richtig gesetzt');
                                        var c = ClientLib.Data.MainData.GetInstance()
                                            .get_PlayerSubstitution()
                                            .getOutgoing();
                                        c.n !== b &&
                                            (h('Substitution to ' + c.n + ' delet'),
                                            (c =
                                                '{"session":"' +
                                                g +
                                                '","id":"' +
                                                c.i +
                                                '","pid":"' +
                                                c.p1 +
                                                '"}'),
                                            CncEcomain.getInstance().removeSubstitution(c, b));
                                    }
                                    '3' == n.responseText &&
                                        h('WarSubstitution Account nicht auf dieser Welt!');
                                    '4' == n.responseText &&
                                        h(
                                            'WarSubstitution kann nicht auf eigenen account gesetzt werden!'
                                        );
                                }),
                                n.open(
                                    'POST',
                                    '/' +
                                        d +
                                        '/Presentation/Service.svc/ajaxEndpoint/SubstitutionCreateReq'
                                ),
                                n.setRequestHeader('Content-Type', 'application/json'),
                                n.send(f));
                            'unset' == c &&
                                ((n.onload = function() {
                                    if ('0' == n.responseText) {
                                        var c =
                                            '{"session":"' +
                                            ClientLib.Net.CommunicationManager.GetInstance().get_InstanceId() +
                                            '","name":"' +
                                            b +
                                            '"}';
                                        CncEcomain.getInstance().setSubstitution(b, c);
                                    }
                                }),
                                n.open(
                                    'POST',
                                    '/' +
                                        d +
                                        '/Presentation/Service.svc/ajaxEndpoint/SubstitutionCancelReq'
                                ),
                                n.setRequestHeader('Content-Type', 'application/json'),
                                n.send(f));
                        },
                        getIsWar: function() {
                            h('Check if is War');
                            'true' !== B.get_IsSubstituteLogin()
                                ? (h('Player is not substitutionLogin'),
                                  CncEcomain.getInstance().remoteRequest('war'))
                                : h('Player is substitutionLogin');
                        },
                        PlayerUpdate: function() {
                            var c = ClientLib.Data.MainData.GetInstance();
                            c.get_Player().get_Name();
                            var f = c.get_Alliance(),
                                b = c.get_Player().get_Id();
                            c.get_Server();
                            ClientLib.Net.CommunicationManager.GetInstance().get_InstanceId();
                            f.get_OwnedPOIs();
                            ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand(
                                'GetPublicPlayerInfo',
                                { id: b },
                                phe.cnc.Util.createEventDelegate(
                                    ClientLib.Net.CommandResult,
                                    this,
                                    Z
                                ),
                                null
                            );
                        },
                        remoteRequest: function(c, f) {
                            h('remoteRequest: ' + c);
                            var b = ClientLib.Data.MainData.GetInstance();
                            var d = b.get_Player().get_Name(),
                                g = b.get_Alliance(),
                                n = b.get_Player().get_Id(),
                                s = b.get_Player().get_IsSubstituteLogin(),
                                q = b.get_Server(),
                                k = ClientLib.Net.CommunicationManager.GetInstance().get_InstanceId(),
                                u = g.get_OwnedPOIs(),
                                p = new qx.io.remote.Request(
                                    'https://cnc-eco.herokuapp.com/api/v1/ingameData',
                                    'POST',
                                    'text/html'
                                );
                            p.setTimeout(3e3);
                            p.setProhibitCaching(!1);
                            p.setRequestHeader('Content-Type', 'text/html');
                            p.setTimeout('3600000');
                            p.setResponseType('text/html');
                            p._ontimeout = function() {
                                p.abort();
                                h('req abort');
                            };
                            'version' == c &&
                                (h('version check'),
                                p.setData('version'),
                                p.setParameter('version', '4.7.5'),
                                p.addListener('completed', function(b) {
                                    'version' === b.getContent()
                                        ? (h('UPDATE is vorhanden'),
                                          CncEcomain.getInstance().UpdateWindow())
                                        : h('Kein Script Update');
                                }),
                                p.send());
                            'update' == c &&
                                (p.setData('UPDATE'),
                                p.setParameter('update', '1'),
                                console.log('PlayerInfoData= null ______________________'),
                                CncEcomain.getInstance().Playerinfo(p, f),
                                p.addListener('completed', function(b) {
                                    h('PlayerDataUpdate');
                                    'UPDATED' === b.getContent() && h('PlayerData Up To Date');
                                }));
                            'new_check' == c &&
                                (p.setData('new_check'),
                                p.setParameter('new_check', d),
                                p.addListener('completed', function(b) {
                                    '' === b.getContent()
                                        ? (h('new Account:: ' + b.getContent()),
                                          CncEcomain.getInstance().winOpen('', d))
                                        : (h('NOT new :: ' + b.getContent()),
                                          CncEcomain.getInstance().winOpen('', ''));
                                }),
                                p.send());
                            'get_token' == c &&
                                (s
                                    ? CncEcomain.getInstance().winOpen(
                                          '',
                                          'error=You cannot add account from substitutions'
                                      )
                                    : p.setData('get_token', d),
                                p.setParameter('get_token', d),
                                p.addListener('completed', function(b) {
                                    const content = b.getContent();
                                    h('content from get_token');
                                    h(content);
                                    // content ? CncEcomain.getInstance().winOpen('', content) : h('token missing - add your account ingame first')
                                    content
                                        ? CncEcomain.getInstance().AuthWindow(content)
                                        : h('token missing - add your account ingame first');
                                }),
                                p.send());
                            'war' == c &&
                                (p.setData('WAR'),
                                p.setParameter('name', d),
                                p.setParameter('alli', g.get_Id()),
                                p.setParameter('world', q.get_WorldId()),
                                p.addListener('completed', function(b) {
                                    var c =
                                        '{"session":"' + k + '","name":"' + b.getContent() + '"}';
                                    if (
                                        '' !== b.getContent() &&
                                        d !== b.getContent() &&
                                        !0 !==
                                            ClientLib.Data.MainData.GetInstance()
                                                .get_Player()
                                                .get_IsSubstituteLogin()
                                    ) {
                                        var f = ClientLib.Data.MainData.GetInstance()
                                            .get_PlayerSubstitution()
                                            .getOutgoing();
                                        null !== f
                                            ? (h(f),
                                              f.n !== b.getContent() &&
                                                  CncEcomain.getInstance().CncEcoUvWindow(
                                                      b.getContent(),
                                                      c
                                                  ))
                                            : CncEcomain.getInstance().CncEcoUvWindow(
                                                  b.getContent(),
                                                  c
                                              );
                                    } else h('No War');
                                }),
                                p.send());
                            'stateofwar' == c &&
                                (p.setData('stateofwar'),
                                p.setParameter('stateofwar', d),
                                p.setParameter('token', n),
                                p.setParameter('alli', g.get_Id()),
                                p.setParameter('world', q.get_WorldId()),
                                p.addListener('completed', function(b) {
                                    'stateofwar' === b.getContent()
                                        ? (h('State of War is set'),
                                          CncEcomain.getInstance().stateofwarwin(d, 'set'))
                                        : h('State of War ERROR :: ' + b.getContent());
                                }),
                                (b = ClientLib.Data.MainData.GetInstance()
                                    .get_Alliance()
                                    .get_IsAdmin()),
                                !0 === b ? p.send() : h('State of War ERROR :: You are no admin!'));
                            'unsetstateofwar' == c &&
                                (p.setData('unsetstateofwar'),
                                p.setParameter('unsetstateofwar', d),
                                p.setParameter('token', n),
                                p.setParameter('alli', g.get_Id()),
                                p.setParameter('world', q.get_WorldId()),
                                p.addListener('completed', function(b) {
                                    'unsetstateofwar' === b.getContent()
                                        ? (h('State of War is unset'),
                                          CncEcomain.getInstance().stateofwarwin(d, 'unset'))
                                        : h('State of War ERROR :: ' + b.getContent());
                                }),
                                (b = ClientLib.Data.MainData.GetInstance()
                                    .get_Alliance()
                                    .get_IsAdmin()),
                                !0 === b ? p.send() : h('State of War ERROR :: You are no admin!'));
                            'poiminister' == c &&
                                (p.setData('poiminister'),
                                p.setParameter('poiminister', d),
                                p.setParameter('token', n),
                                p.setParameter('alli', g.get_Id()),
                                p.setParameter('world', q.get_WorldId()),
                                p.addListener('completed', function(b) {
                                    b.getContent() === d
                                        ? '0' < u.length
                                            ? (h('you are PoiMinister'),
                                              CncEcomain.getInstance().AddMainMenu(
                                                  'PoiInfo',
                                                  function() {
                                                      CncEcomain.getInstance().poiInfo();
                                                  },
                                                  'Alt+x'
                                              ))
                                            : h("you are PoiMinister but alli have 0 Poi's ")
                                        : h('you are not PoiMinister :: ' + b.getContent());
                                }),
                                p.send());
                        },
                        Playerinfo: function(c, f) {
                            qx.core.Init.getApplication()
                                .getBackgroundArea()
                                .closeCityInfo();
                            var b = ClientLib.Data.MainData.GetInstance();
                            var d = b.get_Alliance().get_MemberDataAsArray();
                            var g = b
                                    .get_Server()
                                    .get_Name()
                                    .trim(),
                                n = b.get_Server().get_WorldId(),
                                q = b.get_Cities(),
                                k = q.get_CurrentOwnCity().get_AllianceName(),
                                q = q.get_CurrentOwnCity().get_AllianceId();
                            c.setFormField('version', '4.7.5');
                            c.setFormField('worldId', n);
                            c.setFormField('serverName', g);
                            c.setFormField('allianceId', q);
                            c.setFormField('allianceName', k);
                            c.setFormField('count', d.length);
                            for (g = 0; g < d.length; g++)
                                (n = d[g].Id),
                                    (k = d[g].Name),
                                    (q = d[g].RoleName),
                                    c.setFormField('playerId' + g, n),
                                    c.setFormField('name' + g, k),
                                    c.setFormField('ro' + g, q);
                            d = b.get_Cities();
                            n = d.get_CurrentOwnCity().get_PlayerId();
                            c.setFormField('currentplayerId', n);
                            n = ClientLib.Data.MainData.GetInstance().get_Player().accountId;
                            c.setFormField('accountId', n);
                            n = ClientLib.Data.MainData.GetInstance()
                                .get_Alliance()
                                .get_FirstLeaders().l;
                            k = ClientLib.Data.MainData.GetInstance()
                                .get_Alliance()
                                .get_SecondLeaders().l;
                            c.setFormField('cic', n);
                            c.setFormField('sc', k);
                            n = d.get_CurrentOwnCity().get_PlayerName();
                            c.setFormField('currentplayerName', n);
                            n = f.c.length;
                            c.setFormField('basecount', n);
                            c.setFormField('fraction', f.f);
                            c.setFormField('basekills', f.bd);
                            c.setFormField('pvekills', f.bde);
                            c.setFormField('pvpkills', f.bd - f.bde);
                            c.setFormField('points', f.p);
                            c.setFormField('rank', f.r);
                            c.setFormField('hascode', f.hchc);
                            c.setFormField('maxcp', B.GetCommandPointMaxStorage());
                            c.setFormField('actcp', Math.round(B.GetCommandPointCount()));
                            c.setFormField('funds', b.get_Inventory().get_PlayerFunds());
                            c.setFormField('schirme', Math.round(B.GetSupplyPointCount()));
                            c.setFormField('RPoints', B.get_ResearchPoints());
                            c.setFormField('CreditsCount', Math.round(B.GetCreditsCount()));
                            b = ClientLib.Data.MainData.GetInstance().get_Player();
                            k = b.get_Faction();
                            k = ClientLib.Base.Tech.GetTechIdFromTechNameAndFaction(
                                ClientLib.Base.ETechName.Research_BaseFound,
                                k
                            );
                            k = b
                                .get_PlayerResearch()
                                .GetResearchItemFomMdbId(k)
                                .get_NextLevelInfo_Obj();
                            b = [];
                            for (g in k.rr) 0 < k.rr[g].t && (b[k.rr[g].t] = k.rr[g].c);
                            g = b[ClientLib.Base.EResourceType.Gold];
                            b = b[ClientLib.Base.EResourceType.ResearchPoints];
                            k = B.get_Credits();
                            k =
                                (k.Delta + k.ExtraBonusDelta) *
                                ClientLib.Data.MainData.GetInstance()
                                    .get_Time()
                                    .get_StepsPerHour();
                            g = (g - B.GetCreditsCount()) / k;
                            c.setFormField('timeTOmcv', Math.round(3600 * g));
                            c.setFormField('rpNeeded', b);
                            for (g = 0; g < n; g++) {
                                var k = d.GetCity(f.c[g].i),
                                    b = [];
                                b.Id = f.c[g].i;
                                b.Na = k.get_Name();
                                b.Po = f.c[g].p;
                                b.Lvl = k.get_LvlBase().toFixed(2);
                                b.Off = k.get_LvlOffense().toFixed(2);
                                b.Def = k.get_LvlDefense().toFixed(2);
                                b.PosX = f.c[g].x;
                                b.PosY = f.c[g].y;
                                q = k.get_CityUnitsData();
                                b.repInf =
                                    0 < b.Off
                                        ? q.GetRepairTimeFromEUnitGroup(
                                              ClientLib.Data.EUnitGroup.Infantry,
                                              !1
                                          )
                                        : 0;
                                b.repVeh =
                                    0 < b.Off
                                        ? q.GetRepairTimeFromEUnitGroup(
                                              ClientLib.Data.EUnitGroup.Vehicle,
                                              !1
                                          )
                                        : 0;
                                b.repAir =
                                    0 < b.Off
                                        ? q.GetRepairTimeFromEUnitGroup(
                                              ClientLib.Data.EUnitGroup.Aircraft,
                                              !1
                                          )
                                        : 0;
                                b.maxRep =
                                    0 < b.Off
                                        ? k.GetResourceMaxStorage(
                                              ClientLib.Base.EResourceType.RepairChargeInf
                                          )
                                        : 0;
                                b.availRep =
                                    0 < b.Off
                                        ? ClientLib.Base.Resource.GetResourceCount(
                                              k
                                                  .get_RepairOffenseResources()
                                                  .get_RepairChargeOffense()
                                          )
                                        : 0;
                                var u = k.get_SupportWeapon();
                                b.supWp = null !== u ? u.n : '';
                                u = k.get_SupportData();
                                b.SL = null !== u ? u.get_Level() : 0;
                                q = k.get_CityBuildingsData();
                                u = q.GetUniqueBuildingByTechName(
                                    ClientLib.Base.ETechName.Construction_Yard
                                );
                                b.CY = null !== u ? u.get_CurrentLevel() : 0;
                                u = q.GetUniqueBuildingByTechName(
                                    ClientLib.Base.ETechName.Defense_Facility
                                );
                                b.DF = null !== u ? u.get_CurrentLevel() : 0;
                                u = q.GetUniqueBuildingByTechName(
                                    ClientLib.Base.ETechName.Defense_HQ
                                );
                                b.DHQ = null !== u ? u.get_CurrentLevel() : 0;
                                b.PP = Math.round(
                                    k.GetResourceGrowPerHour(
                                        ClientLib.Base.EResourceType.Power,
                                        !1,
                                        !1
                                    )
                                );
                                b.PBP = Math.round(
                                    k.GetResourceBonusGrowPerHour(
                                        ClientLib.Base.EResourceType.Power
                                    )
                                );
                                b.PAB = ClientLib.Data.MainData.GetInstance()
                                    .get_Alliance()
                                    .GetPOIBonusFromResourceType(
                                        ClientLib.Base.EResourceType.Power
                                    );
                                b.CP = Math.round(
                                    ClientLib.Base.Resource.GetResourceGrowPerHour(
                                        k.get_CityCreditsProduction(),
                                        !1
                                    )
                                );
                                b.CBP = Math.round(
                                    ClientLib.Base.Resource.GetResourceBonusGrowPerHour(
                                        k.get_CityCreditsProduction(),
                                        !1
                                    )
                                );
                                b.Tall = Math.round(
                                    k.GetResourceGrowPerHour(
                                        ClientLib.Base.EResourceType.Tiberium,
                                        !1,
                                        !1
                                    ) +
                                        k.GetResourceBonusGrowPerHour(
                                            ClientLib.Base.EResourceType.Tiberium
                                        ) +
                                        ClientLib.Data.MainData.GetInstance()
                                            .get_Alliance()
                                            .GetPOIBonusFromResourceType(
                                                ClientLib.Base.EResourceType.Tiberium
                                            )
                                );
                                b.Call = Math.round(
                                    k.GetResourceGrowPerHour(
                                        ClientLib.Base.EResourceType.Crystal,
                                        !1,
                                        !1
                                    ) +
                                        k.GetResourceBonusGrowPerHour(
                                            ClientLib.Base.EResourceType.Crystal
                                        ) +
                                        ClientLib.Data.MainData.GetInstance()
                                            .get_Alliance()
                                            .GetPOIBonusFromResourceType(
                                                ClientLib.Base.EResourceType.Crystal
                                            )
                                );
                                b.PPall = b.PP + b.PBP + b.PAB;
                                b.CPall = b.CP + b.CBP;
                                c.setFormField('basename' + g, b.Na);
                                c.setFormField('baseid' + g, b.Id);
                                c.setFormField('punkte' + g, b.Po);
                                c.setFormField('level' + g, b.Lvl);
                                c.setFormField('off' + g, b.Off);
                                c.setFormField('def' + g, b.Def);
                                c.setFormField('repinf' + g, b.repInf);
                                c.setFormField('repveh' + g, b.repVeh);
                                c.setFormField('repair' + g, b.repAir);
                                c.setFormField('repmax' + g, b.maxRep);
                                c.setFormField('availrep' + g, b.availRep);
                                c.setFormField('suptype' + g, b.supWp);
                                c.setFormField('suplvl' + g, b.SL);
                                c.setFormField('cylvl' + g, b.CY);
                                c.setFormField('dflvl' + g, b.DF);
                                c.setFormField('dfhqlvl' + g, b.DHQ);
                                c.setFormField('power' + g, b.PPall);
                                c.setFormField('tib' + g, b.Tall);
                                c.setFormField('cris' + g, b.Call);
                                c.setFormField('cash' + g, b.CPall);
                                c.setFormField('x' + g, b.PosX);
                                c.setFormField('y' + g, b.PosY);
                                V(b.Id, g, c);
                            }
                            c.send();
                        },
                        stateofwarwin: function(c, f) {
                            var b = new qx.ui.window.Window('Alliance on war');
                            if ('set' == f) {
                                var d = 'You "' + c + '" have set State of War';
                                var g = 'Set State of War';
                            }
                            'unset' == f &&
                                ((d = 'You "' + c + '" have delet State of War'),
                                (g = 'UnSet State of War'));
                            b.set({
                                caption: g,
                                icon: 'webfrontend/ui/common/icon_moral_alert_red.png',
                                layout: new qx.ui.layout.HBox(4),
                                width: 250,
                                height: 75,
                                contentPaddingTop: 0,
                                contentPaddingBottom: 6,
                                contentPaddingRight: 6,
                                contentPaddingLeft: 6,
                                showMaximize: !1,
                                showMinimize: !1,
                                allowMaximize: !1,
                                allowMinimize: !1,
                                resizable: !1,
                                visibility: 'visible',
                                textColor: '#bfbfbf',
                            });
                            b.setPadding(10);
                            b.setLayout(new qx.ui.layout.VBox(10));
                            g = new qx.ui.container.Composite(
                                new qx.ui.layout.VBox(4).set({ alignX: 'left' })
                            );
                            g.add(new qx.ui.basic.Label(d));
                            d = new qx.ui.container.Composite(
                                new qx.ui.layout.VBox(1).set({ alignX: 'center' })
                            );
                            var n = new qx.ui.form.Button('close');
                            n.set({
                                toolTipText: 'close',
                                width: 70,
                                height: 20,
                                maxWidth: 200,
                                maxHeight: 32,
                                center: !0,
                                rich: !0,
                            });
                            d.add(n);
                            n.addListener(
                                'execute',
                                function(c) {
                                    b.close();
                                },
                                this
                            );
                            b.add(g);
                            b.add(d);
                            b.center();
                            b.open();
                        },
                        CncEcoUvWindow: function(c, f) {
                            var b = new qx.ui.window.Window('Alliance on war'),
                                d =
                                    'Your commander has declared war status!|It was sent a substitution to:|' +
                                    c;
                            b.set({
                                caption: 'Alliance on war',
                                icon: 'webfrontend/ui/common/icon_moral_alert_red.png',
                                layout: new qx.ui.layout.HBox(4),
                                width: 300,
                                height: 150,
                                contentPaddingTop: 0,
                                contentPaddingBottom: 6,
                                contentPaddingRight: 6,
                                contentPaddingLeft: 6,
                                showMaximize: !1,
                                showMinimize: !1,
                                allowMaximize: !1,
                                allowMinimize: !1,
                                resizable: !1,
                                visibility: 'visible',
                                textColor: '#bfbfbf',
                            });
                            b.setPadding(10);
                            b.setLayout(new qx.ui.layout.VBox(10));
                            var g = new qx.ui.container.Composite(
                                    new qx.ui.layout.VBox(4).set({ alignX: 'left' })
                                ),
                                n = new qx.ui.container.Composite(
                                    new qx.ui.layout.VBox(1).set({ alignX: 'center' })
                                ),
                                q = new qx.ui.form.Button('send Substitution'),
                                k = new qx.ui.form.Button('abort');
                            q.set({
                                toolTipText: 'send Substitution',
                                width: 120,
                                height: 20,
                                maxWidth: 200,
                                maxHeight: 32,
                                center: !0,
                                rich: !0,
                            });
                            k.set({
                                toolTipText: 'dont send substitution',
                                width: 120,
                                height: 20,
                                maxWidth: 200,
                                maxHeight: 32,
                                center: !0,
                                rich: !0,
                            });
                            n.add(q);
                            n.add(k);
                            q.addListener(
                                'execute',
                                function(d) {
                                    b.close();
                                    CncEcomain.getInstance().substitutionXhr('set', f, c);
                                },
                                this
                            );
                            k.addListener(
                                'execute',
                                function(c) {
                                    b.close();
                                },
                                this
                            );
                            d = d.split('|');
                            for (i = 0; '3' > i; i++) g.add(new qx.ui.basic.Label(d[i]));
                            b.add(g);
                            b.add(n);
                            b.center();
                            b.open();
                        },
                        UpdateWindow: function() {
                            var c = new qx.ui.window.Window('CnCEco Update!');
                            c.set({
                                caption: 'CnCEco Update!',
                                icon: 'webfrontend/ui/common/icon_moral_alert_red.png',
                                layout: new qx.ui.layout.HBox(4),
                                width: 450,
                                height: 170,
                                contentPaddingTop: 0,
                                contentPaddingBottom: 6,
                                contentPaddingRight: 6,
                                contentPaddingLeft: 6,
                                showMaximize: !1,
                                showMinimize: !1,
                                allowMaximize: !1,
                                allowMinimize: !1,
                                resizable: !0,
                                visibility: 'excluded',
                                textColor: '#bfbfbf',
                            });
                            c.setPadding(10);
                            c.setLayout(new qx.ui.layout.VBox(10));
                            var f = new qx.ui.container.Composite(
                                    new qx.ui.layout.VBox(2).set({ alignX: 'left' })
                                ),
                                b = new qx.ui.basic.Label('CnCEco script "4.7.5" is to old');
                            f.add(b);
                            b = new qx.ui.basic.Label(
                                'Please disable/deinstall the old script and get new version'
                            );
                            f.add(b);
                            b = new qx.ui.basic.Label('');
                            f.add(b);
                            b = new qx.ui.basic.Label(
                                'Click button below to open link to get new version'
                            );
                            f.add(b);
                            var b = new qx.ui.container.Composite(
                                    new qx.ui.layout.VBox(2).set({ alignX: 'right' })
                                ),
                                d = new qx.ui.form.Button('Get new Script');
                            b.add(d);
                            d.addListener(
                                'execute',
                                function() {
                                    c.close();
                                    qx.core.Init.getApplication().showExternal(
                                        'https://www.member-stats.de/?link=new_version',
                                        '.member-stats'
                                    );
                                },
                                this
                            );
                            c.add(f);
                            c.add(b);
                            c.center();
                            c.open();
                        },
                        AuthWindow: function(content) {
                            var c = new qx.ui.window.Window('CnCEco add player!');
                            c.set({
                                caption: 'CnCEco add player!',
                                icon: 'webfrontend/ui/common/icon_moral_alert_red.png',
                                layout: new qx.ui.layout.HBox(4),
                                width: 450,
                                height: 170,
                                contentPaddingTop: 0,
                                contentPaddingBottom: 6,
                                contentPaddingRight: 6,
                                contentPaddingLeft: 6,
                                showMaximize: !1,
                                showMinimize: !1,
                                allowMaximize: !1,
                                allowMinimize: !1,
                                resizable: !0,
                                visibility: 'excluded',
                                textColor: '#bfbfbf',
                            });
                            c.setPadding(10);
                            c.setLayout(new qx.ui.layout.VBox(10));
                            var f = new qx.ui.container.Composite(
                                    new qx.ui.layout.VBox(2).set({ alignX: 'left' })
                                ),
                                b = new qx.ui.basic.Label('You can now add your player to CnCEco');
                            f.add(b);
                            b = new qx.ui.basic.Label('');
                            f.add(b);
                            b = new qx.ui.basic.Label(
                                'Click button below to add your player to your CnCEco account'
                            );
                            f.add(b);
                            var b = new qx.ui.container.Composite(
                                    new qx.ui.layout.VBox(2).set({ alignX: 'right' })
                                ),
                                d = new qx.ui.form.Button('add player');
                            b.add(d);
                            d.addListener(
                                'execute',
                                function() {
                                    c.close();
                                    // CncEcomain.getInstance().winOpen('', content)
                                    qx.core.Init.getApplication().showExternal(
                                        'https://www.cnc-eco.de/user?' + content
                                    );
                                },
                                this
                            );
                            c.add(f);
                            c.add(b);
                            c.center();
                            c.open();
                        },
                        getPoiInfo: function() {
                            function c(b, c) {
                                try {
                                    var f = c.c;
                                    M = {};
                                    for (var d in f) {
                                        var g = f[d];
                                        M[d] = {};
                                        M[d].x = g.x;
                                        M[d].y = g.y;
                                        M[d].n = g.n;
                                        I.push([M[d].n, M[d].x, M[d].y, c.n]);
                                    }
                                } catch (C) {
                                    h('onPlayerInfo: ', C);
                                }
                            }
                            x = [];
                            I = [];
                            var f = ClientLib.Data.MainData.GetInstance(),
                                b = f.get_Alliance().get_OwnedPOIs(),
                                d = b.length,
                                g = this.getWindow();
                            g.push('search all Pois from Alliance\n');
                            for (var n = 0; n < d; n++) {
                                if (null !== b[n] && 'undefined' !== b[n]) {
                                    var q = phe.cnc.gui.util.Text.getPoiInfosByType(b[n].t).name,
                                        k = b[n].t,
                                        u = b[n].l,
                                        p = b[n].i,
                                        l = ClientLib.Base.PointOfInterestTypes.GetScoreByLevel(
                                            b[n].l
                                        ),
                                        O = phe.cnc.gui.util.Numbers.formatCoordinates(
                                            b[n].x,
                                            b[n].y
                                        );
                                    x.push([p, q, u, l, b[n].x, b[n].y, O, k]);
                                }
                                if (n + 1 == d)
                                    for (
                                        h('AlliancePois scanned'),
                                            g.push('AlliancePois scanned\n'),
                                            q = [],
                                            q = f.get_Alliance().get_MemberDataAsArray(),
                                            g.push('search all Playerbases\n'),
                                            k = 0;
                                        k < q.length;
                                        k++
                                    )
                                        (W = q[k].Name),
                                            ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand(
                                                'GetPublicPlayerInfoByName',
                                                { name: W },
                                                phe.cnc.Util.createEventDelegate(
                                                    ClientLib.Net.CommandResult,
                                                    this,
                                                    c
                                                ),
                                                !0
                                            ),
                                            k + 1 === q.length &&
                                                (h('save all Playerbases'),
                                                g.push('all Playerbases saved\n'),
                                                CncEcomain.getInstance().getBasesOnPoi());
                            }
                        },
                        getBasesOnPoi: function() {
                            h('scan if Playerbase is in range of a AlliancePoi');
                            var c = this.getWindow();
                            c.push('scan if Playerbase is in range of a AlliancePoi\n');
                            E = [];
                            ClientLib.Data.MainData.GetInstance()
                                .get_Alliance()
                                .get_MemberDataAsArray();
                            window.setTimeout(function() {
                                for (var f = 0; f < I.length; f++) {
                                    for (var b = 0; b < x.length; b++) {
                                        var d = Math.abs(I[f][1] - x[b][4]),
                                            g = Math.abs(I[f][2] - x[b][5]);
                                        2 < d ||
                                            2 < g ||
                                            (2 == d && 2 == g) ||
                                            E.push([
                                                x[b][0],
                                                x[b][1],
                                                x[b][2],
                                                x[b][3],
                                                x[b][6],
                                                I[f][0],
                                                I[f][3],
                                                x[b][4],
                                                x[b][5],
                                                x[b][7],
                                            ]);
                                    }
                                    f + 1 === I.length &&
                                        b === x.length &&
                                        (h('Scan complete'),
                                        c.push('Scan complete\n'),
                                        CncEcomain.getInstance().SendPoiInfo());
                                }
                            }, 2e3);
                        },
                        SendPoiInfo: function() {
                            var c = this.getWindow();
                            c.push('Preparing to Send PoiInfo to Memberstats.de\n');
                            h('Preparing to Send PoiInfo');
                            window.setTimeout(function() {
                                function f() {
                                    b.addListener('completed', function(b) {
                                        '' !== b.getContent()
                                            ? (h('hab was bekommen ' + b.getContent()),
                                              c.push('complete Send PoiInfo to Memberstats.de\n'),
                                              'none' != CncEcomain.getInstance().getForumId()
                                                  ? ((b = CncEcomain.getInstance().getForumId()),
                                                    CncEcomain.getInstance().PoiForum(E, b))
                                                  : CncEcomain.getInstance().CreatePoiForum(E))
                                            : h('hab nix bekommen ' + b.getContent());
                                    });
                                    b.send();
                                }
                                var b = new qx.io.remote.Request(
                                    'https://www.member-stats.de/poi/',
                                    'POST',
                                    'text/html'
                                );
                                b.setProhibitCaching(!1);
                                b.setRequestHeader('Content-Type', 'text/html');
                                b.setTimeout('3600000');
                                b.setResponseType('text/html');
                                if (null !== E) {
                                    var d = ClientLib.Data.MainData.GetInstance(),
                                        g = d.get_Server().get_WorldId(),
                                        d = d.get_Alliance().get_Id();
                                    b.setFormField('worldId', g);
                                    b.setFormField('allianceId', d);
                                    b.setData('PoiData');
                                    b.setParameter('version', '4.7.5');
                                    b.setFormField('count', E.length);
                                    for (g = 0; g < E.length; g++)
                                        b.setFormField('id' + g, E[g][0]),
                                            b.setFormField('name' + g, E[g][1]),
                                            b.setFormField('level' + g, E[g][2]),
                                            b.setFormField('score' + g, E[g][3]),
                                            b.setFormField('coords' + g, E[g][4]),
                                            b.setFormField('playerBase' + g, E[g][5]),
                                            b.setFormField('player' + g, E[g][6]),
                                            b.setFormField('x' + g, E[g][7]),
                                            b.setFormField('y' + g, E[g][8]),
                                            b.setFormField('type' + g, E[g][9]),
                                            g + 1 === E.length &&
                                                (h('Send PoiInfo to https://www.member-stats.de'),
                                                window.setTimeout(f, 1e3));
                                }
                            }, 2e3);
                        },
                        winOpen: function(c, f) {
                            var b = CncEcoScanner.Layout.window.getInstance(),
                                d = 'https://www.member-stats.de';
                            '' !== f && (d = 'https://www.cnc-eco.de/user?' + f);
                            if ('layout' == f) {
                                var g = ClientLib.Data.MainData.GetInstance();
                                var n = g.get_Player().get_Name();
                                d =
                                    'https://www.cnc-eco.de/layouts/' +
                                    g.get_Server().get_WorldId();
                            }
                            var g = qx.core.Init.getApplication(),
                                q = new webfrontend.gui.CustomWindow(g.tr('tnf:external link')).set(
                                    {
                                        resizable: !1,
                                        showClose: !1,
                                        showMaximize: !1,
                                        showMinimize: !1,
                                    }
                                );
                            q.setLayout(new qx.ui.layout.VBox(10));
                            q.addListenerOnce('resize', q.center, q);
                            q.add(
                                new qx.ui.basic.Label(
                                    g.tr('tnf:link will lead to an external page?') +
                                        '<br />' +
                                        g.tr('tnf:do you want to continue?')
                                ).set({ rich: !0, maxWidth: 360, wrap: !0, textColor: 'white' })
                            );
                            c = new qx.ui.container.Composite(
                                new qx.ui.layout.HBox(10).set({ alignX: 'right' })
                            );
                            var k = new webfrontend.ui.SoundButton(g.tr('tnf:no'));
                            k.addListener(
                                'execute',
                                function(c) {
                                    q.close();
                                    'layout' == f &&
                                        (CncEcoScanner.getInstance().win.close(),
                                        !0 !== b.active &&
                                            CncEcoScanner.Layout.window
                                                .getInstance()
                                                .openWindow('CncEco Scan result'));
                                },
                                this
                            );
                            g = new webfrontend.ui.SoundButton(g.tr('tnf:yes'));
                            g.addListener(
                                'execute',
                                function(c) {
                                    q.close();
                                    'layout' == f &&
                                        (CncEcoScanner.getInstance().win.close(),
                                        !0 !== b.active &&
                                            CncEcoScanner.Layout.window
                                                .getInstance()
                                                .openWindow('CncEco Scan result'));
                                    c =
                                        "<form name='LaunchForm' id='LaunchForm' action='" +
                                        d +
                                        "' method='POST'>";
                                    c += "<input type='hidden' name='dummy' value='dummy' />";
                                    'layout' == f &&
                                        (c +=
                                            "<input type='hidden' name='name' value='" +
                                            n +
                                            "' />");
                                    c +=
                                        "</form><script type='text/javascript'>document.LaunchForm.submit();\x3c/script>";
                                    var g = window.open('', '');
                                    g.document.write(c);
                                    g.document.close();
                                },
                                this
                            );
                            c.add(k);
                            c.add(g);
                            q.add(c);
                            q.setModal(!0);
                            q.open();
                        },
                        getForumId: function(c) {
                            c = ClientLib.Data.MainData.GetInstance()
                                .get_Forum()
                                .get_Forums();
                            var f = c.c,
                                b = 'none',
                                d = 1,
                                g;
                            for (g in c.d) {
                                if ('CncEco PoiInfo' == c.d[g].Title) return (b = c.d[g].Id);
                                if ('none' == b && d === f && d <= f) return b;
                                d++;
                            }
                        },
                        SortAlliancePois: function(c, f) {
                            function b(b, c) {
                                !0 === c && 0 === g
                                    ? (d.push('Post all AlliancePois to Forum\n'), g++)
                                    : !0 === c &&
                                      (0 === U
                                          ? U++
                                          : 1 === U
                                          ? h('do something postInfoAll')
                                          : 2 < R && h('postInfoAll do is was schiaf glafn ' + R));
                                !0 !== c &&
                                    d.push('ERROR: Post all AlliancePois to Forum\n' + c + '\n');
                            }
                            var d = CncEcomain.getInstance().getWindow();
                            d.push('Try to insert a post to "List of Alliance Poi"\n');
                            h('forumid: ' + c + ' threadid: ' + f);
                            for (
                                var g = 0,
                                    n = [],
                                    q = [],
                                    k = [],
                                    u = [],
                                    p = [],
                                    l = [],
                                    O = [],
                                    m = '',
                                    A = 0;
                                A < x.length;
                                A++
                            ) {
                                var D = x[A][1],
                                    w = x[A][7],
                                    t = x[A][2],
                                    C = x[A][0],
                                    v = x[A][3],
                                    z = x[A][6],
                                    y = x[A][4],
                                    r = x[A][5];
                                2 === x[A][7] && n.push([C, D, t, v, y, r, z, w]);
                                3 === x[A][7] && q.push([C, D, t, v, y, r, z, w]);
                                4 === x[A][7] && k.push([C, D, t, v, y, r, z, w]);
                                5 === x[A][7] && u.push([C, D, t, v, y, r, z, w]);
                                6 === x[A][7] && p.push([C, D, t, v, y, r, z, w]);
                                7 === x[A][7] && l.push([C, D, t, v, y, r, z, w]);
                                8 === x[A][7] && O.push([C, D, t, v, y, r, z, w]);
                                if (A + 1 == x.length)
                                    for (r = y = z = v = C = t = w = D = 0; r <= n.length; r++)
                                        if (
                                            (0 === r && (m += '[b][u]Tiberium[/u][/b]\n'),
                                            r == n.length)
                                        )
                                            for (
                                                var m = m + '\n',
                                                    m = m + '\n',
                                                    m = m + '[u]Tiberium TotalScore:[/u]\n',
                                                    m = m + ('[b]' + D + '[/b]\n'),
                                                    m = m + '[hr]\n',
                                                    F = 0;
                                                F <= q.length;
                                                F++
                                            )
                                                if (
                                                    (0 === F && (m += '[b][u]Crystal[/u][/b]\n'),
                                                    F == q.length)
                                                )
                                                    for (
                                                        var m = m + '\n',
                                                            m = m + '\n',
                                                            m = m + '[u]Crystal TotalScore:[/u]\n',
                                                            m = m + ('[b]' + w + '[/b]\n'),
                                                            m = m + '[hr]\n',
                                                            G = 0;
                                                        G <= k.length;
                                                        G++
                                                    )
                                                        if (
                                                            (0 === G &&
                                                                (m += '[b][u]Reactor[/u][/b]\n'),
                                                            G == k.length)
                                                        )
                                                            for (
                                                                var m = m + '\n',
                                                                    m = m + '\n',
                                                                    m =
                                                                        m +
                                                                        '[u]Power TotalScore:[/u]\n',
                                                                    m = m + ('[b]' + t + '[/b]\n'),
                                                                    m = m + '[hr]\n',
                                                                    B = 0;
                                                                B <= u.length;
                                                                B++
                                                            )
                                                                if (
                                                                    (0 === B &&
                                                                        (m +=
                                                                            '[b][u]Tungsten[/u][/b]\n'),
                                                                    B == u.length)
                                                                )
                                                                    for (
                                                                        var m = m + '\n',
                                                                            m = m + '\n',
                                                                            m =
                                                                                m +
                                                                                '[u]Tung TotalScore:[/u]\n',
                                                                            m =
                                                                                m +
                                                                                ('[b]' +
                                                                                    C +
                                                                                    '[/b]\n'),
                                                                            m = m + '[hr]\n',
                                                                            E = 0;
                                                                        E <= p.length;
                                                                        E++
                                                                    )
                                                                        if (
                                                                            (0 === E &&
                                                                                (m +=
                                                                                    '[b][u]Uranium[/u][/b]\n'),
                                                                            E == p.length)
                                                                        )
                                                                            for (
                                                                                var m = m + '\n',
                                                                                    m = m + '\n',
                                                                                    m =
                                                                                        m +
                                                                                        '[u]Uran TotalScore:[/u]\n',
                                                                                    m =
                                                                                        m +
                                                                                        ('[b]' +
                                                                                            v +
                                                                                            '[/b]\n'),
                                                                                    m =
                                                                                        m +
                                                                                        '[hr]\n',
                                                                                    J = 0;
                                                                                J <= l.length;
                                                                                J++
                                                                            )
                                                                                if (
                                                                                    (0 === J &&
                                                                                        (m +=
                                                                                            '[b][u]Aircraft[/u][/b]\n'),
                                                                                    J == l.length)
                                                                                )
                                                                                    for (
                                                                                        var m =
                                                                                                m +
                                                                                                '\n',
                                                                                            m =
                                                                                                m +
                                                                                                '\n',
                                                                                            m =
                                                                                                m +
                                                                                                '[u]Air TotalScore:[/u]\n',
                                                                                            m =
                                                                                                m +
                                                                                                ('[b]' +
                                                                                                    z +
                                                                                                    '[/b]\n'),
                                                                                            m =
                                                                                                m +
                                                                                                '[hr]\n',
                                                                                            K = 0;
                                                                                        K <=
                                                                                        O.length;
                                                                                        K++
                                                                                    )
                                                                                        0 === K &&
                                                                                            (m +=
                                                                                                '[b][u]Resonator[/u][/b]\n'),
                                                                                            K ==
                                                                                            O.length
                                                                                                ? ((m +=
                                                                                                      '\n'),
                                                                                                  (m +=
                                                                                                      '\n'),
                                                                                                  (m +=
                                                                                                      '[u]Reso TotalScore:[/u]\n'),
                                                                                                  (m +=
                                                                                                      '[b]' +
                                                                                                      y +
                                                                                                      '[/b]\n'))
                                                                                                : ((m +=
                                                                                                      'Level: ' +
                                                                                                      O[
                                                                                                          K
                                                                                                      ][2] +
                                                                                                      ' Score: ' +
                                                                                                      O[
                                                                                                          K
                                                                                                      ][3] +
                                                                                                      ' Coords: [coords]' +
                                                                                                      O[
                                                                                                          K
                                                                                                      ][6] +
                                                                                                      '[/coords]\n'),
                                                                                                  (y +=
                                                                                                      O[
                                                                                                          K
                                                                                                      ][3]));
                                                                                else
                                                                                    (m +=
                                                                                        'Level: ' +
                                                                                        l[J][2] +
                                                                                        ' Score: ' +
                                                                                        l[J][3] +
                                                                                        ' Coords: [coords]' +
                                                                                        l[J][6] +
                                                                                        '[/coords]\n'),
                                                                                        (z +=
                                                                                            l[
                                                                                                J
                                                                                            ][3]);
                                                                        else
                                                                            (m +=
                                                                                'Level: ' +
                                                                                p[E][2] +
                                                                                ' Score: ' +
                                                                                p[E][3] +
                                                                                ' Coords: [coords]' +
                                                                                p[E][6] +
                                                                                '[/coords]\n'),
                                                                                (v += p[E][3]);
                                                                else
                                                                    (m +=
                                                                        'Level: ' +
                                                                        u[B][2] +
                                                                        ' Score: ' +
                                                                        u[B][3] +
                                                                        ' Coords: [coords]' +
                                                                        u[B][6] +
                                                                        '[/coords]\n'),
                                                                        (C += u[B][3]);
                                                        else
                                                            (m +=
                                                                'Level: ' +
                                                                k[G][2] +
                                                                ' Score: ' +
                                                                k[G][3] +
                                                                ' Coords: [coords]' +
                                                                k[G][6] +
                                                                '[/coords]\n'),
                                                                (t += k[G][3]);
                                                else
                                                    (m +=
                                                        'Level: ' +
                                                        q[F][2] +
                                                        ' Score: ' +
                                                        q[F][3] +
                                                        ' Coords: [coords]' +
                                                        q[F][6] +
                                                        '[/coords]\n'),
                                                        (w += q[F][3]);
                                        else
                                            (m +=
                                                'Level: ' +
                                                n[r][2] +
                                                ' Score: ' +
                                                n[r][3] +
                                                ' Coords: [coords]' +
                                                n[r][6] +
                                                '[/coords]\n'),
                                                (D += n[r][3]);
                            }
                            if (A == x.length)
                                if (2999 >= m.length)
                                    ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand(
                                        'CreateForumPost',
                                        { forumID: c, threadID: f, postMessage: m },
                                        phe.cnc.Util.createEventDelegate(
                                            ClientLib.Net.CommandResult,
                                            this,
                                            b
                                        ),
                                        !0
                                    ),
                                        h('All Pois inserted to Forum');
                                else
                                    for (A in ((n = m.split('[hr]\n')), n))
                                        ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand(
                                            'CreateForumPost',
                                            { forumID: c, threadID: f, postMessage: n[A] },
                                            phe.cnc.Util.createEventDelegate(
                                                ClientLib.Net.CommandResult,
                                                this,
                                                b
                                            ),
                                            !0
                                        ),
                                            h('All Pois inserted to Forum');
                        },
                        SortWhoPois: function(c, f) {
                            function b(b, c) {
                                !0 === c && 0 === d
                                    ? (g.push('Post "Who is at POI X" to Forum\n'), d++)
                                    : !0 === c &&
                                      (0 === R
                                          ? R++
                                          : 1 === R
                                          ? (g.close(), h('do something postInfoWho'))
                                          : 1 < R && h('postInfoWho do is was schiaf glafn ' + R));
                                !0 !== c &&
                                    g.push('ERROR: Post "Who is at POI X" to Forum\n' + c + '\n');
                            }
                            var d = 0;
                            h('Try to insert a post to "Who is at POI X"');
                            var g = CncEcomain.getInstance().getWindow();
                            g.push('Try to insert a post to "Who is at POI X"\n');
                            for (
                                var n = [],
                                    q = [],
                                    k = [],
                                    u = [],
                                    p = [],
                                    l = [],
                                    r = [],
                                    m = '',
                                    A = 0,
                                    D = 0,
                                    w = 0,
                                    t = 0,
                                    C = 0,
                                    v = 0,
                                    z = 0,
                                    y = 0;
                                y < x.length;
                                y++
                            ) {
                                for (
                                    var B = x[y][0],
                                        F = x[y][1],
                                        G = x[y][2],
                                        H = x[y][3],
                                        N = x[y][4],
                                        J = x[y][5],
                                        K = x[y][6],
                                        L = x[y][7],
                                        M = 0;
                                    M < E.length;
                                    M++
                                ) {
                                    var I = E[M][5],
                                        P = E[M][6];
                                    x[y][0] == E[M][0] &&
                                        (2 == L &&
                                            ('undefined' === typeof n[A] && (n[A] = []),
                                            n[A].push([B, F, G, H, N, J, K, L, I, P])),
                                        3 == L &&
                                            ('undefined' === typeof q[D] && (q[D] = []),
                                            q[D].push([B, F, G, H, N, J, K, L, I, P])),
                                        4 == L &&
                                            ('undefined' === typeof k[w] && (k[w] = []),
                                            k[w].push([B, F, G, H, N, J, K, L, I, P])),
                                        5 == L &&
                                            ('undefined' === typeof u[t] && (u[t] = []),
                                            u[t].push([B, F, G, H, N, J, K, L, I, P])),
                                        6 == L &&
                                            ('undefined' === typeof p[C]
                                                ? ((p[C] = []),
                                                  p[C].push([B, F, G, H, N, J, K, L, I, P]),
                                                  C++)
                                                : p[C].push([B, F, G, H, N, J, K, L, I, P])),
                                        7 == L &&
                                            ('undefined' === typeof l[v] && (l[v] = []),
                                            l[v].push([B, F, G, H, N, J, K, L, I, P])),
                                        8 == L &&
                                            ('undefined' === typeof r[z] && (r[z] = []),
                                            r[z].push([B, F, G, H, N, J, K, L, I, P])));
                                }
                                'undefined' !== typeof n[A] && A++;
                                'undefined' !== typeof q[D] && D++;
                                'undefined' !== typeof k[w] && w++;
                                'undefined' !== typeof u[t] && t++;
                                'undefined' !== typeof p[C] && C++;
                                'undefined' !== typeof l[v] && v++;
                                'undefined' !== typeof r[z] && z++;
                            }
                            if (y == x.length) {
                                for (A = 0; A < n.length; A++)
                                    for (
                                        0 === A && (m += '[b][u]Tiberium[/u][/b]\n'), D = 0;
                                        D < n[A].length;
                                        D++
                                    )
                                        0 === D &&
                                            (m +=
                                                'Level: ' +
                                                n[A][D][2] +
                                                ' Score: ' +
                                                n[A][D][3] +
                                                ' Coords [coords]' +
                                                n[A][D][6] +
                                                '[/coords]\n'),
                                            (m +=
                                                'Player: [player]' +
                                                n[A][D][9] +
                                                '[/player] base: ' +
                                                n[A][D][8] +
                                                '\n'),
                                            D + 1 == n[A].length && (m += '\n');
                                for (D = 0; D < q.length; D++)
                                    for (
                                        0 === D && (m += '[hr]\n[b][u]Crystal[/u][/b]\n'), w = 0;
                                        w < q[D].length;
                                        w++
                                    )
                                        0 === w &&
                                            (m +=
                                                'Level: ' +
                                                q[D][w][2] +
                                                ' Score: ' +
                                                q[D][w][3] +
                                                ' Coords [coords]' +
                                                q[D][w][6] +
                                                '[/coords]\n'),
                                            (m +=
                                                'Player: [player]' +
                                                q[D][w][9] +
                                                '[/player] base: ' +
                                                q[D][w][8] +
                                                '\n'),
                                            w + 1 == q[D].length && (m += '\n');
                                for (w = 0; w < k.length; w++)
                                    for (
                                        0 === w && (m += '[hr]\n[b][u]Reactor[/u][/b]\n'), t = 0;
                                        t < k[w].length;
                                        t++
                                    )
                                        0 === t &&
                                            (m +=
                                                'Level: ' +
                                                k[w][t][2] +
                                                ' Score: ' +
                                                k[w][t][3] +
                                                ' Coords [coords]' +
                                                k[w][t][6] +
                                                '[/coords]\n'),
                                            (m +=
                                                'Player: [player]' +
                                                k[w][t][9] +
                                                '[/player] base: ' +
                                                k[w][t][8] +
                                                '\n'),
                                            t + 1 == k[w].length && (m += '\n');
                                for (t = 0; t < u.length; t++)
                                    for (
                                        0 === t && (m += '[hr]\n[b][u]Tungsten[/u][/b]\n'), C = 0;
                                        C < u[t].length;
                                        C++
                                    )
                                        0 === C &&
                                            (m +=
                                                'Level: ' +
                                                u[t][C][2] +
                                                ' Score: ' +
                                                u[t][C][3] +
                                                ' Coords [coords]' +
                                                u[t][C][6] +
                                                '[/coords]\n'),
                                            (m +=
                                                'Player: [player]' +
                                                u[t][C][9] +
                                                '[/player] base: ' +
                                                u[t][C][8] +
                                                '\n'),
                                            C + 1 == u[t].length && (m += '\n');
                                for (C = 0; C < p.length; C++)
                                    for (
                                        0 === C && (m += '[hr]\n[b][u]Uranium[/u][/b]\n'), v = 0;
                                        v < p[C].length;
                                        v++
                                    )
                                        0 === v &&
                                            (m +=
                                                'Level: ' +
                                                p[C][v][2] +
                                                ' Score: ' +
                                                p[C][v][3] +
                                                ' Coords [coords]' +
                                                p[C][v][6] +
                                                '[/coords]\n'),
                                            (m +=
                                                'Player: [player]' +
                                                p[C][v][9] +
                                                '[/player] base: ' +
                                                p[C][v][8] +
                                                '\n'),
                                            v + 1 == p[C].length && (m += '\n');
                                for (v = 0; v < l.length; v++)
                                    for (
                                        0 === v && (m += '[hr]\n[b][u]Aircraft[/u][/b]\n'), z = 0;
                                        z < l[v].length;
                                        z++
                                    )
                                        0 === z &&
                                            (m +=
                                                'Level: ' +
                                                l[v][z][2] +
                                                ' Score: ' +
                                                l[v][z][3] +
                                                ' Coords [coords]' +
                                                l[v][z][6] +
                                                '[/coords]\n'),
                                            (m +=
                                                'Player: [player]' +
                                                l[v][z][9] +
                                                '[/player] base: ' +
                                                l[v][z][8] +
                                                '\n'),
                                            z + 1 == l[v].length && (m += '\n');
                                for (z = 0; z < r.length; z++)
                                    for (
                                        0 === z && (m += '[hr]\n[b][u]Resonator[/u][/b]\n'), y = 0;
                                        y < r[z].length;
                                        y++
                                    )
                                        0 === y &&
                                            (m +=
                                                'Level: ' +
                                                r[z][y][2] +
                                                ' Score: ' +
                                                r[z][y][3] +
                                                ' Coords [coords]' +
                                                r[z][y][6] +
                                                '[/coords]\n'),
                                            (m +=
                                                'Player: [player]' +
                                                r[z][y][9] +
                                                '[/player] base: ' +
                                                r[z][y][8] +
                                                '\n'),
                                            y + 1 == r[z].length && (m += '\n');
                                if (
                                    A == n.length &&
                                    D == q.length &&
                                    w == k.length &&
                                    t == u.length &&
                                    C == p.length &&
                                    v == l.length &&
                                    z == r.length
                                )
                                    if (((n = m.length), console.log(n), 2999 >= n))
                                        ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand(
                                            'CreateForumPost',
                                            { forumID: c, threadID: f, postMessage: m },
                                            phe.cnc.Util.createEventDelegate(
                                                ClientLib.Net.CommandResult,
                                                this,
                                                b
                                            ),
                                            !0
                                        ) && h('who Pois inserted to Forum');
                                    else {
                                        var m = m.split('[hr]\n'),
                                            Q;
                                        for (Q in m)
                                            ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand(
                                                'CreateForumPost',
                                                { forumID: c, threadID: f, postMessage: m[Q] },
                                                phe.cnc.Util.createEventDelegate(
                                                    ClientLib.Net.CommandResult,
                                                    this,
                                                    b
                                                ),
                                                !0
                                            ),
                                                h('who Pois inserted to Forum');
                                    }
                                else
                                    console.log(
                                        'tib ' +
                                            A +
                                            ' ' +
                                            n.length +
                                            ' cris ' +
                                            D +
                                            ' ' +
                                            q.length +
                                            ' reaktor ' +
                                            w +
                                            ' ' +
                                            k.length +
                                            ' tung ' +
                                            t +
                                            ' ' +
                                            u.length +
                                            ' uran ' +
                                            C +
                                            ' ' +
                                            p.length +
                                            ' luft ' +
                                            v +
                                            ' ' +
                                            l.length +
                                            ' reso ' +
                                            z +
                                            ' ' +
                                            r.length
                                    );
                            }
                        },
                        PoiForum: function(c, f) {
                            function b(b, c) {
                                !0 === b &&
                                    '0' == c &&
                                    ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand(
                                        'GetForumThreads',
                                        { forumId: f, skip: 0, take: 10 },
                                        phe.cnc.Util.createEventDelegate(
                                            ClientLib.Net.CommandResult,
                                            this,
                                            d
                                        ),
                                        !0
                                    );
                            }
                            function d(c, d) {
                                console.log(d);
                                for (var k in d) {
                                    var h = d[k].i;
                                    'List of Alliance Poi' == d[k].t &&
                                        0 == n &&
                                        (CncEcomain.getInstance().SortAlliancePois(f, h), (n = 1));
                                    'Who is at POI X' == d[k].t &&
                                        0 == q &&
                                        (CncEcomain.getInstance().SortWhoPois(f, h), (q = 1));
                                }
                                0 == n
                                    ? (g.push('Try to create Thread "List of Alliance Poi"\n'),
                                      ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand(
                                          'CreateForumThread',
                                          {
                                              forumID: f,
                                              threadTitle: 'List of Alliance Poi',
                                              firstPostMessage: '.',
                                              subscribe: !0,
                                          },
                                          phe.cnc.Util.createEventDelegate(
                                              ClientLib.Net.CommandResult,
                                              this,
                                              b
                                          ),
                                          !0
                                      ))
                                    : 0 == q &&
                                      (g.push('Try to create Thread2 "Who is at POI X"\n'),
                                      ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand(
                                          'CreateForumThread',
                                          {
                                              forumID: f,
                                              threadTitle: 'Who is at POI X',
                                              firstPostMessage: '.',
                                              subscribe: !0,
                                          },
                                          phe.cnc.Util.createEventDelegate(
                                              ClientLib.Net.CommandResult,
                                              this,
                                              b
                                          ),
                                          !0
                                      ));
                            }
                            ClientLib.Data.MainData.GetInstance()
                                .get_Forum()
                                .get_Forums();
                            var g = this.getWindow(),
                                n = 0,
                                q = 0;
                            ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand(
                                'GetForumThreads',
                                { forumId: f, skip: 0, take: 10 },
                                phe.cnc.Util.createEventDelegate(
                                    ClientLib.Net.CommandResult,
                                    this,
                                    d
                                ),
                                !0
                            );
                        },
                        CreatePoiForum: function(c, f) {
                            if (
                                !0 ===
                                ClientLib.Data.MainData.GetInstance()
                                    .get_Alliance()
                                    .get_CanCreateForum()
                            ) {
                                var b = function() {
                                        n.push('Try to create Thread "List of Alliance Poi"\n');
                                        var b = CncEcomain.getInstance().getForumId(c),
                                            b =
                                                '{"session":"' +
                                                k +
                                                '", "forumID":' +
                                                b +
                                                ',"threadTitle":"List of Alliance Poi","subscribe":true,"firstPostMessage":"."}';
                                        l.onload = function() {
                                            '0' == l.responseText
                                                ? (l.abort(),
                                                  h('Thread erstellt!!!'),
                                                  n.push(
                                                      'Thread "List of Alliance Poi" created!\n'
                                                  ),
                                                  window.setTimeout(d, 1e3))
                                                : h('ERROR: thread erstellen!');
                                        };
                                        l.open(
                                            'POST',
                                            '/' +
                                                q +
                                                '/Presentation/Service.svc/ajaxEndpoint/CreateForumThread'
                                        );
                                        l.setRequestHeader('Content-Type', 'application/json');
                                        l.send(b);
                                    },
                                    d = function() {
                                        n.push('Try to create Thread2 "Who is at POI X"\n');
                                        var b = CncEcomain.getInstance().getForumId(c),
                                            b =
                                                '{"session":"' +
                                                k +
                                                '", "forumID":' +
                                                b +
                                                ',"threadTitle":"Who is at POI X","subscribe":true,"firstPostMessage":"."}';
                                        l.onload = function() {
                                            '0' == l.responseText
                                                ? (l.abort(),
                                                  h('Thread2 erstellt!!!'),
                                                  n.push('Thread "Who is at POI X" created!\n'),
                                                  window.setTimeout(g, 1e3))
                                                : h('ERROR: Thread2 erstellen!');
                                        };
                                        l.open(
                                            'POST',
                                            '/' +
                                                q +
                                                '/Presentation/Service.svc/ajaxEndpoint/CreateForumThread'
                                        );
                                        l.setRequestHeader('Content-Type', 'application/json');
                                        l.send(b);
                                    },
                                    g = function() {
                                        var b = CncEcomain.getInstance().getForumId(c);
                                        CncEcomain.getInstance().PoiForum(c, b);
                                    };
                                h('CreatePoiForum');
                                var n = this.getWindow();
                                n.push('Try to create PoiForum\n');
                                var q = ClientLib.Data.MainData.GetInstance()
                                        .get_Server()
                                        .get_WorldId(),
                                    k = ClientLib.Net.CommunicationManager.GetInstance().get_InstanceId(),
                                    l = new qx.bom.request.Xhr();
                                l.onload = function() {
                                    '0' == l.responseText
                                        ? (l.abort(),
                                          h('forum erstellt!!!'),
                                          n.push('created PoiForum\n'),
                                          window.setTimeout(b, 1e3))
                                        : h('ERROR: forum erstellt!');
                                };
                                var p =
                                    '{"session":"' +
                                    k +
                                    '", "sharedAlliance":null,"Title":"CncEco PoiInfo","Description":"List of AlliancePois"}';
                                l.open(
                                    'POST',
                                    '/' + q + '/Presentation/Service.svc/ajaxEndpoint/CreateForum'
                                );
                                l.setRequestHeader('Content-Type', 'application/json');
                                l.send(p);
                            } else n.push('no rights to create PoiForum\n');
                        },
                        getWindow: function() {
                            null === this.poiwindow &&
                                ((this.poiwindow = new CncEcoreport.window()),
                                this.poiwindow.moveTo(
                                    window.innerWidth - 150 - this.poiwindow.getWidth() - 200,
                                    40
                                ));
                            return this.poiwindow;
                        },
                        getPoiWindow: function() {
                            null === this.poiInfoWindow &&
                                ((this.poiInfowindow = new CncEcoreport.window()),
                                this.poiInfoWindow.center());
                            return this.poiwindow;
                        },
                        _Allisupport: function() {
                            for (
                                var c = ClientLib.Data.MainData.GetInstance()
                                        .get_AllianceSupportState()
                                        .get_Bases().d,
                                    f,
                                    b = Object.keys(c),
                                    d = b.length,
                                    g = {},
                                    n = 0,
                                    q = 0,
                                    k = d;
                                d--;

                            )
                                (f = c[b[d]]),
                                    g.hasOwnProperty(f.get_Type()) || (g[f.get_Type()] = 0),
                                    g[f.get_Type()]++,
                                    30 <= f.get_Level() && q++,
                                    (n += f.get_Level());
                            n /= k;
                            c = ClientLib.Data.MainData.GetInstance()
                                .get_Alliance()
                                .get_MemberData().d;
                            g = 0;
                            b = Object.keys(c);
                            for (d = b.length; d--; ) (f = c[b[d]]), (g += f.Bases);
                            b =
                                'Bases: ' +
                                g +
                                ' SupCount: ' +
                                k +
                                '(' +
                                ((k / g) * 100).toFixed(0) +
                                '%) \u00d8: ' +
                                n.toFixed(2) +
                                ' 30+: ' +
                                q +
                                '(' +
                                ((q / g) * 100).toFixed(0) +
                                '%)';
                            CncEcomain.getInstance()
                                .getWindow()
                                .push(b);
                        },
                    },
                });
                qx.Class.define('CncEcoPlayerinfo', {
                    type: 'singleton',
                    extend: qx.core.Object,
                    members: {
                        windowinterval: null,
                        windowbevoreunload: null,
                        get_info: function() {
                            try {
                                var c = ClientLib.Data.MainData.GetInstance();
                                B = c.get_Player();
                                B.get_Name();
                                B.get_AccountId();
                                T = c.get_Alliance();
                                c.get_Server().get_WorldId();
                                return !0;
                            } catch (f) {
                                (c = { func: 'get_info', class: 'CncEco5main' }),
                                    (c.error = f),
                                    h(f),
                                    beta && H(f, c);
                            }
                        },
                        initialize: function() {
                            try {
                                return (
                                    h('CncEcoPlayerinfo load'),
                                    h('CncEcoPlayerinfo load'),
                                    h('CncEcoPlayerinfo load'),
                                    h('CncEcoPlayerinfo load'),
                                    this.get_info() &&
                                        ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand(
                                            'GetPublicPlayerInfo',
                                            { id: playerId },
                                            phe.cnc.Util.createEventDelegate(
                                                ClientLib.Net.CommandResult,
                                                this,
                                                this.Playerinfo
                                            ),
                                            null
                                        ),
                                    (this.windowinterval = window.setInterval(function() {
                                        CncEcoPlayerinfo.getInstance().interval();
                                    }, 18e5)),
                                    (this.windowbevoreunload = window.addEventListener(
                                        'beforeunload',
                                        function() {
                                            CncEcoPlayerinfo.getInstance().interval();
                                        }
                                    )),
                                    !0
                                );
                            } catch (f) {
                                var c = { func: 'ini', class: 'CncEcoPlayerinfo' };
                                c.error = f;
                                h(f);
                                beta && H(f, c);
                            }
                        },
                        interval: function() {
                            try {
                                if (Main.get_info())
                                    return (
                                        ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand(
                                            'GetPublicPlayerInfo',
                                            { id: playerId },
                                            phe.cnc.Util.createEventDelegate(
                                                ClientLib.Net.CommandResult,
                                                this,
                                                this.Playerinfo
                                            ),
                                            null
                                        ),
                                        !0
                                    );
                            } catch (f) {
                                var c = { func: 'interval', class: 'CncEcoPlayerinfo' };
                                c.error = f;
                                h(f);
                                beta && H(f, c);
                            }
                        },
                        Playerinfo: function(c, f) {
                            try {
                                var b = { server: {} };
                                b.server.serverid = worldId;
                                b.server.serverName = MainData.get_Server()
                                    .get_Name()
                                    .trim();
                                if (0 < f.a) {
                                    b.alli = {};
                                    b.alli.alliId = f.a;
                                    b.alli.alliName = f.an;
                                    b.alli.cic = T.get_FirstLeaders().l;
                                    b.alli.sc = T.get_SecondLeaders().l;
                                    b.alli.roleinfo = T.get_Roles().d;
                                    var d = MainData.get_Alliance().get_MemberData();
                                    b.alli.member = d;
                                }
                                b.player = {};
                                b.player.name = playerName;
                                b.player.id = playerId;
                                b.player.accountid = accountId;
                                b.player.creationDate = B.get_CreationDate();
                                b.player.fraction = B.get_Faction();
                                b.player.bases = {};
                                b.player.pve = f.bd;
                                b.player.pvp = f.bd - f.bde;
                                b.player.points = f.p;
                                b.player.rank = f.r;
                                b.player.hascode = f.hchc;
                                b.player.maxcp = B.GetCommandPointMaxStorage();
                                b.player.actcp = Math.round(B.GetCommandPointCount());
                                b.player.funds = MainData.get_Inventory().get_PlayerFunds();
                                b.player.schirme = Math.round(B.GetSupplyPointCount());
                                b.player.RPoints = B.get_ResearchPoints();
                                b.player.CreditsCount = Math.round(B.GetCreditsCount());
                                var g = MainData.get_Player(),
                                    n = g.get_Faction(),
                                    q = ClientLib.Base.Tech.GetTechIdFromTechNameAndFaction(
                                        ClientLib.Base.ETechName.Research_BaseFound,
                                        n
                                    ),
                                    k = g
                                        .get_PlayerResearch()
                                        .GetResearchItemFomMdbId(q)
                                        .get_NextLevelInfo_Obj(),
                                    d = [],
                                    u;
                                for (u in k.rr) 0 < k.rr[u].t && (d[k.rr[u].t] = k.rr[u].c);
                                var p = d[ClientLib.Base.EResourceType.Gold],
                                    r = d[ClientLib.Base.EResourceType.ResearchPoints],
                                    x = g.get_Credits(),
                                    m =
                                        (x.Delta + x.ExtraBonusDelta) *
                                        ClientLib.Data.MainData.GetInstance()
                                            .get_Time()
                                            .get_StepsPerHour(),
                                    A = (p - B.GetCreditsCount()) / m;
                                b.player.timeTOmcv = Math.round(3600 * A);
                                b.player.rpNeeded = r;
                                var D = MainData.get_Cities(),
                                    w = f.c.length;
                                b.player.basecount = w;
                                for (u = 0; u < w; u++) {
                                    var t = D.GetCity(f.c[u].i),
                                        g = {};
                                    g.Id = f.c[u].i;
                                    g.Na = t.get_Name();
                                    g.Po = f.c[u].p;
                                    g.Lvl = parseFloat(t.get_LvlBase().toFixed(2));
                                    g.Off = parseFloat(t.get_LvlOffense().toFixed(2));
                                    g.Def = parseFloat(t.get_LvlDefense().toFixed(2));
                                    g.PosX = f.c[u].x;
                                    g.PosY = f.c[u].y;
                                    var C = t.get_CityUnitsData();
                                    g.repInf =
                                        0 < g.Off
                                            ? C.GetRepairTimeFromEUnitGroup(
                                                  ClientLib.Data.EUnitGroup.Infantry,
                                                  !1
                                              )
                                            : 0;
                                    g.repVeh =
                                        0 < g.Off
                                            ? C.GetRepairTimeFromEUnitGroup(
                                                  ClientLib.Data.EUnitGroup.Vehicle,
                                                  !1
                                              )
                                            : 0;
                                    g.repAir =
                                        0 < g.Off
                                            ? C.GetRepairTimeFromEUnitGroup(
                                                  ClientLib.Data.EUnitGroup.Aircraft,
                                                  !1
                                              )
                                            : 0;
                                    g.maxRep =
                                        0 < g.Off
                                            ? t.GetResourceMaxStorage(
                                                  ClientLib.Base.EResourceType.RepairChargeInf
                                              )
                                            : 0;
                                    g.availRep =
                                        0 < g.Off
                                            ? ClientLib.Base.Resource.GetResourceCount(
                                                  t
                                                      .get_RepairOffenseResources()
                                                      .get_RepairChargeOffense()
                                              )
                                            : 0;
                                    var v = t.get_SupportWeapon();
                                    g.supWp = null !== v ? v.n : '';
                                    v = t.get_SupportData();
                                    g.supWplvl = null !== v ? v.get_Level() : 0;
                                    var z = t.get_CityBuildingsData();
                                    v = z.GetUniqueBuildingByTechName(
                                        ClientLib.Base.ETechName.Construction_Yard
                                    );
                                    g.CY = null !== v ? v.get_CurrentLevel() : 0;
                                    v = z.GetUniqueBuildingByTechName(
                                        ClientLib.Base.ETechName.Defense_Facility
                                    );
                                    g.DF = null !== v ? v.get_CurrentLevel() : 0;
                                    v = z.GetUniqueBuildingByTechName(
                                        ClientLib.Base.ETechName.Defense_HQ
                                    );
                                    g.DHQ = null !== v ? v.get_CurrentLevel() : 0;
                                    g.PP = Math.round(
                                        t.GetResourceGrowPerHour(
                                            ClientLib.Base.EResourceType.Power,
                                            !1,
                                            !1
                                        )
                                    );
                                    g.PBP = Math.round(
                                        t.GetResourceBonusGrowPerHour(
                                            ClientLib.Base.EResourceType.Power
                                        )
                                    );
                                    g.PAB = ClientLib.Data.MainData.GetInstance()
                                        .get_Alliance()
                                        .GetPOIBonusFromResourceType(
                                            ClientLib.Base.EResourceType.Power
                                        );
                                    g.CP = Math.round(
                                        ClientLib.Base.Resource.GetResourceGrowPerHour(
                                            t.get_CityCreditsProduction(),
                                            !1
                                        )
                                    );
                                    g.CBP = Math.round(
                                        ClientLib.Base.Resource.GetResourceBonusGrowPerHour(
                                            t.get_CityCreditsProduction(),
                                            !1
                                        )
                                    );
                                    g.Tall = Math.round(
                                        t.GetResourceGrowPerHour(
                                            ClientLib.Base.EResourceType.Tiberium,
                                            !1,
                                            !1
                                        ) +
                                            t.GetResourceBonusGrowPerHour(
                                                ClientLib.Base.EResourceType.Tiberium
                                            ) +
                                            ClientLib.Data.MainData.GetInstance()
                                                .get_Alliance()
                                                .GetPOIBonusFromResourceType(
                                                    ClientLib.Base.EResourceType.Tiberium
                                                )
                                    );
                                    g.Call = Math.round(
                                        t.GetResourceGrowPerHour(
                                            ClientLib.Base.EResourceType.Crystal,
                                            !1,
                                            !1
                                        ) +
                                            t.GetResourceBonusGrowPerHour(
                                                ClientLib.Base.EResourceType.Crystal
                                            ) +
                                            ClientLib.Data.MainData.GetInstance()
                                                .get_Alliance()
                                                .GetPOIBonusFromResourceType(
                                                    ClientLib.Base.EResourceType.Crystal
                                                )
                                    );
                                    g.PPall = g.PP + g.PBP + g.PAB;
                                    g.CPall = g.CP + g.CBP;
                                    b.player.bases[u] = g;
                                    b.player.bases[u].cncopt = V(g.Id, u);
                                }
                                b.player.mainoff = 0;
                                b.player.maindef = 0;
                                b.player.mainavailrep = 0;
                                b.player.mainrepinf = 0;
                                b.player.mainrepveh = 0;
                                b.player.mainrepair = 0;
                                b.player.supschnitt = 0;
                                b.player.defschnitt = 0;
                                b.player.tibgesamt = 0;
                                b.player.crigesamt = 0;
                                b.player.cashgesamt = 0;
                                b.player.powergesamt = 0;
                                b.player.mainpower = 0;
                                for (var y in b.player.bases)
                                    delete b.player.bases[y].PP,
                                        delete b.player.bases[y].PBP,
                                        delete b.player.bases[y].PAB,
                                        delete b.player.bases[y].CP,
                                        delete b.player.bases[y].CBP,
                                        b.player.bases[y].Off > b.player.mainoff &&
                                            ((b.player.mainoff = b.player.bases[y].Off),
                                            (b.player.mainpower = b.player.bases[y].PPall),
                                            (b.player.maindef = b.player.bases[y].Def),
                                            (b.player.mainavailrep = b.player.bases[y].availRep),
                                            (b.player.mainrepinf = b.player.bases[y].repInf),
                                            (b.player.mainrepveh = b.player.bases[y].repVeh),
                                            (b.player.mainrepair = b.player.bases[y].repAir)),
                                        (b.player.supschnitt += b.player.bases[y].supWplvl),
                                        (b.player.defschnitt += b.player.bases[y].Def),
                                        (b.player.tibgesamt += b.player.bases[y].Tall),
                                        (b.player.crigesamt += b.player.bases[y].Call),
                                        (b.player.cashgesamt += b.player.bases[y].CPall),
                                        (b.player.powergesamt += b.player.bases[y].PPall);
                                b.player.supschnitt /= b.player.basecount;
                                b.player.defschnitt /= b.player.basecount;
                                b.player.supschnitt = b.player.supschnitt.toFixed(2);
                                b.player.defschnitt = b.player.defschnitt.toFixed(2);
                                var E = b.player.bases;
                                delete b.player.bases;
                                b.player.bases = E;
                                if (null !== l.xhr._xhr)
                                    (xhr = l.xhr),
                                        xhr.send(
                                            'https://www.member-stats.de/playerinfo.php?i=playerinfos',
                                            'POST',
                                            null,
                                            b,
                                            this.callback
                                        );
                                else {
                                    var F = {
                                        func: 'playerinfo',
                                        class: 'CncEcoPlayerinfo',
                                        error: 'CncEco.xhr.req !== null',
                                    };
                                    h('CncEco.xhr.req !== null');
                                    beta && H('CncEco.xhr.req !== null', F);
                                }
                            } catch (G) {
                                (F = { func: 'playerinfo', class: 'CncEcoPlayerinfo' }),
                                    (F.error = G),
                                    h(G),
                                    beta && H(G, F);
                            }
                        },
                        callback: function(c) {
                            try {
                                !1 !== JSON.isjson(c) &&
                                    ('parse' === JSON.isjson(c)
                                        ? JSON.parse(c)
                                        : 'stringify' === JSON.isjson(c) && JSON.stringify(c));
                            } catch (f) {
                                (c = { func: 'callback', class: 'CncEcoPlayerinfo' }),
                                    (c.error = f),
                                    h(f),
                                    beta && H(f, c);
                            }
                        },
                    },
                });
                qx.Class.define('CncEcoreport.window', {
                    extend: qx.ui.window.Window,
                    construct: function() {
                        qx.ui.window.Window.call(this);
                        this.set({
                            caption: 'CncEco Info',
                            icon: 'webfrontend/ui/icons/icn_show_combat_active.png',
                            layout: new qx.ui.layout.VBox(4),
                            width: 300,
                            height: 50,
                            contentPaddingTop: 0,
                            contentPaddingBottom: 6,
                            contentPaddingRight: 6,
                            contentPaddingLeft: 6,
                            showMaximize: !1,
                            showMinimize: !1,
                            allowMaximize: !1,
                            allowMinimize: !1,
                            resizable: !0,
                            visibility: 'excluded',
                            textColor: '#bfbfbf',
                        });
                        this.getChildControl('icon').set({
                            scale: !0,
                            width: 18,
                            height: 17,
                            alignY: 'middle',
                            marginLeft: 8,
                        });
                        this.add(
                            (this.logContainer = new qx.ui.container.Composite(
                                new qx.ui.layout.VBox()
                            ))
                        );
                        this.add(new qx.ui.core.Spacer(), { flex: 1 });
                        this.addListener('close', function() {
                            this.onClose();
                        });
                    },
                    members: {
                        logContainer: null,
                        onClose: function() {
                            this.removeAll();
                            this.add(
                                (this.logContainer = new qx.ui.container.Composite(
                                    new qx.ui.layout.VBox()
                                ))
                            );
                        },
                        push: function(c, f) {
                            this.isActive() || this.open();
                            this.logContainer.add(new qx.ui.basic.Label(c.toString()));
                            f && this.logContainer.add(f);
                        },
                        delall: function() {
                            this.removeAll();
                            this.add(
                                (this.logContainer = new qx.ui.container.Composite(
                                    new qx.ui.layout.VBox()
                                ))
                            );
                        },
                        initialize: function() {
                            try {
                                h('CncEcoreport.window loadet');
                            } catch (c) {
                                h(c);
                            }
                        },
                    },
                });
                var r = {
                        _g: function(c, f, b, d) {
                            c = c.toString().replace(/\s/gim, '');
                            f = c.match(f);
                            var g;
                            for (g = 1; g < d + 1; g++)
                                null !== f && 6 === f[g].length
                                    ? console.debug(b, g, f[g])
                                    : null !== f && 0 < f[g].length
                                    ? console.warn(b, g, f[g])
                                    : (console.error('Error - ', b, g, 'not found'),
                                      console.warn(b, c));
                            return f;
                        },
                        patch: function() {
                            if (!d._patched) {
                                var c = ClientLib.Data.WorldSector.WorldObjectCity.prototype,
                                    c = ClientLib.Data.WorldSector.WorldObjectNPCBase.prototype;
                                re = /100\){0,1};this\.(.{6})=Math.floor.*d\+=f;this\.(.{6})=\(/;
                                var f = r._g(
                                    c.$ctor,
                                    re,
                                    'ClientLib.Data.WorldSector.WorldObjectNPCBase',
                                    2
                                );
                                null !== f && 6 === f[1].length
                                    ? (c.getLevel = function() {
                                          return this[f[1]];
                                      })
                                    : console.error(
                                          'Error - ClientLib.Data.WorldSector.WorldObjectNPCBase.Level undefined'
                                      );
                                null !== f && 6 === f[2].length
                                    ? (c.getID = function() {
                                          return this[f[2]];
                                      })
                                    : console.error(
                                          'Error - ClientLib.Data.WorldSector.WorldObjectNPCBase.ID undefined'
                                      );
                                c = ClientLib.Data.WorldSector.WorldObjectNPCCamp.prototype;
                                re = /100\){0,1};this\.(.{6})=Math.floor.*this\.(.{6})=\(*g\>\>(22|0x16)\)*\&.*=-1;\}this\.(.{6})=\(/;
                                var b = r._g(
                                    c.$ctor,
                                    re,
                                    'ClientLib.Data.WorldSector.WorldObjectNPCCamp',
                                    4
                                );
                                null !== b && 6 === b[1].length
                                    ? (c.getLevel = function() {
                                          return this[b[1]];
                                      })
                                    : console.error(
                                          'Error - ClientLib.Data.WorldSector.WorldObjectNPCCamp.Level undefined'
                                      );
                                null !== b && 6 === b[2].length
                                    ? (c.getCampType = function() {
                                          return this[b[2]];
                                      })
                                    : console.error(
                                          'Error - ClientLib.Data.WorldSector.WorldObjectNPCCamp.CampType undefined'
                                      );
                                null !== b && 6 === b[4].length
                                    ? (c.getID = function() {
                                          return this[b[4]];
                                      })
                                    : console.error(
                                          'Error - ClientLib.Data.WorldSector.WorldObjectNPCCamp.ID undefined'
                                      );
                                d._patched = !0;
                            }
                        },
                    },
                    d = null;
                qx.Class.define('CncEcoScanner', {
                    type: 'singleton',
                    extend: qx.core.Object,
                    members: {
                        initialize: function() {
                            try {
                                h('Scanner loadet\n'),
                                    CncEcomain.getInstance().AddMainMenu(
                                        'scan layouts',
                                        function() {
                                            CncEcoScanner.getInstance().scan();
                                        },
                                        'Alt+s'
                                    ),
                                    (d = CncEcoScanner.getInstance()),
                                    (d.win = CncEcomain.getInstance().getWindow()),
                                    (d.storage = CncEcostorage.getInstance()),
                                    (d.xhr = l.xhr),
                                    (d.winOpen = CncEcomain.getInstance()),
                                    d.startup();
                            } catch (c) {
                                h(c);
                            }
                        },
                        _patched: !1,
                        _bases: {},
                        _selectionBases: {},
                        _scanned: [],
                        _toScan: [],
                        _scanning: !1,
                        failCount: 0,
                        wincounter: 0,
                        basecounter: 0,
                        button: function() {
                            if (!0 === d._abort) {
                                var c = new qx.ui.form.Button('resume');
                                c.addListener(
                                    'execute',
                                    function() {
                                        d.resume();
                                    },
                                    this
                                );
                            } else
                                (c = new qx.ui.form.Button('stop')),
                                    c.addListener(
                                        'execute',
                                        function(c) {
                                            d.abort();
                                            var b = ClientLib.Data.MainData.GetInstance();
                                            c = b.get_Player().get_Name();
                                            var f = b.get_Server().get_WorldId(),
                                                b = b.get_Alliance().get_Id();
                                            d.xhr.send(
                                                'https://cnc-eco.herokuapp.com/api/v1/layouts?pl=' +
                                                    c +
                                                    '&w=' +
                                                    f +
                                                    '&a=' +
                                                    b,
                                                'POST',
                                                null,
                                                d._bases,
                                                h
                                            );
                                        },
                                        this
                                    );
                            return c;
                        },
                        scan: function(c) {
                            h('start scan');
                            if (d._scanning) h('BaseScanner._scanning');
                            else if (
                                (null == c &&
                                    (d.win.isActive() && (d.win.delall(), d.win.close()),
                                    d.win.open()),
                                !0 === d._abort)
                            )
                                d.resume();
                            else {
                                d.win.push('start Scanning');
                                d._bases = {};
                                d._scanning = !0;
                                d._count = 0;
                                d._done = 0;
                                d.index = -1;
                                d._toScanMap = {};
                                d._toScan = [];
                                d.basecounter = 0;
                                c = d.storage.get('scan');
                                Array.isArray(c) ||
                                    (d.storage.set('scan', '[]'), (c = d.storage.get('scan')));
                                for (var f = d.storage.get('scan').length; 800 <= f; )
                                    c.shift(), f--, 800 >= f && d.storage.set('scan', c);
                                c = ClientLib.Data.MainData.GetInstance()
                                    .get_Cities()
                                    .get_AllCities().d;
                                for (var b in c)
                                    c.hasOwnProperty(b) &&
                                        ((f = c[b]),
                                        void 0 === f && h('unable to find base: ' + b),
                                        d.getNearByBases(f));
                                d.scanNextBase();
                            }
                        },
                        getNearByBases: function(c) {
                            for (
                                var f,
                                    b = c.get_PosX(),
                                    l = c.get_PosY(),
                                    g =
                                        ClientLib.Data.MainData.GetInstance()
                                            .get_Server()
                                            .get_MaxAttackDistance() - 0.5,
                                    n = ClientLib.Data.MainData.GetInstance().get_World(),
                                    q = 0,
                                    k = l - 11;
                                k <= l + 11;
                                k++
                            )
                                for (var h = b - 11; h <= b + 11; h++) {
                                    var p = Math.abs(b - h),
                                        r = Math.abs(l - k),
                                        p = Math.sqrt(p * p + r * r);
                                    if (
                                        !(
                                            p >= g ||
                                            void 0 !== d._toScanMap[h + ':' + k] ||
                                            void 0 !== d._bases[h + ':' + k] ||
                                            ((r = n.GetObjectFromPosition(h, k)),
                                            null === r ||
                                                (r.Type !==
                                                    ClientLib.Data.WorldSector.ObjectType.NPCBase &&
                                                    r.Type !==
                                                        ClientLib.Data.WorldSector.ObjectType
                                                            .NPCCamp) ||
                                                ('function' === typeof r.getCampType &&
                                                    r.getCampType() ===
                                                        ClientLib.Data.Reports.ENPCCampType
                                                            .Destroyed))
                                        )
                                    ) {
                                        var x = 0;
                                        if (null !== d.storage.get('scan'))
                                            if (
                                                ((f = d.storage.get('scan')),
                                                !0 === Array.isArray(f))
                                            )
                                                for (
                                                    var m = d.storage.get('scan').length, A = 0;
                                                    A < m;
                                                    A++
                                                )
                                                    r.getID() === f[A] && (x = 1);
                                            else d.storage.set('scan', '[]');
                                        else d.storage.set('scan', '[]');
                                        0 < x ||
                                            ((f = d.storage.get('scan')),
                                            f.push(r.getID()),
                                            CncEcostorage.getInstance().set('scan', f),
                                            (m = ClientLib.Data.MainData.GetInstance()),
                                            (f = m.get_Player().get_Name()),
                                            (x = m.get_Server().get_WorldId()),
                                            (m = m.get_Alliance().get_Id()),
                                            (p = {
                                                x: h,
                                                y: k,
                                                level: r.getLevel(),
                                                id: r.getID(),
                                                distance: p,
                                                selectedBaseID: c.get_Id(),
                                                alliance: m,
                                                world: x,
                                                player: f,
                                                failCount: 0,
                                            }),
                                            d._toScan.push(p),
                                            (d._toScanMap[h + ':' + k] = p),
                                            q++);
                                    }
                                }
                        },
                        abort: function() {
                            d._scanning = !1;
                            d._abort = !0;
                            d.win.delall();
                            d.win.push('stop scan');
                            d.win.push(('   ' + d.index).slice(-3) + '/' + d._toScan.length);
                            d.win.push('', d.button());
                        },
                        resume: function() {
                            d._scanning = !0;
                            d._abort = !1;
                            d.win.delall();
                            d.win.push('resume scan');
                            d.win.push(('   ' + d.index).slice(-3) + '/' + d._toScan.length);
                            d.win.push('', d.button());
                            d.scanNextBase();
                        },
                        done: function() {
                            d._done++;
                            var c = ClientLib.Data.MainData.GetInstance();
                            var f = c.get_Player().get_Name(),
                                b = c.get_Server().get_WorldId(),
                                l = c.get_Alliance().get_Id();
                            !1 === d._scanning && d._count === d._done && !1 === d._abort
                                ? (d.win.push(''),
                                  0 < d._count
                                      ? (d.win.push('Done! (' + d._count + ')'),
                                        d.win.push(''),
                                        d.xhr.send(
                                            'https://cnc-eco.herokuapp.com/api/v1/layouts?pl=' +
                                                f +
                                                '&w=' +
                                                b +
                                                '&a=' +
                                                l,
                                            'POST',
                                            null,
                                            d._bases,
                                            h
                                        ),
                                        d.winOpen.winOpen('layout', 'layout'),
                                        5 > Object.keys(d._bases).length &&
                                            ((c = CncEcoScanner.Layout.window.getInstance()),
                                            !0 !== c.active &&
                                                ((c.active = !0),
                                                c.openWindow('CncEco Scan result', null, 1)),
                                            c.FO(d._bases),
                                            d.xhr.send(
                                                'https://cnc-eco.herokuapp.com/api/v1/layouts?pl=' +
                                                    f +
                                                    '&w=' +
                                                    b +
                                                    '&a=' +
                                                    l,
                                                'POST',
                                                null,
                                                d._bases,
                                                h
                                            ),
                                            (d._bases = {})))
                                      : (d.win.push('Done! 0 new layouts to scan'), d.win.push('')))
                                : !1 === d._scanning && d._count + 1 === d._done && !1 === d._abort
                                ? (d.win.delall(),
                                  d.win.push(''),
                                  0 < d._count
                                      ? (d.win.push('Done! (' + d._count + ')'),
                                        d.win.push(''),
                                        d.xhr.send(
                                            'https://cnc-eco.herokuapp.com/api/v1/layouts?pl=' +
                                                f +
                                                '&w=' +
                                                b +
                                                '&a=' +
                                                l,
                                            'POST',
                                            null,
                                            d._bases,
                                            h
                                        ),
                                        d.winOpen.winOpen('layout', 'layout'),
                                        5 > Object.keys(d._bases).length &&
                                            ((c = CncEcoScanner.Layout.window.getInstance()),
                                            !0 !== c.active &&
                                                ((c.active = !0),
                                                c.openWindow('CncEco Scan result', null, 1)),
                                            c.FO(d._bases),
                                            d.xhr.send(
                                                'https://cnc-eco.herokuapp.com/api/v1/layouts?pl=' +
                                                    f +
                                                    '&w=' +
                                                    b +
                                                    '&a=' +
                                                    l,
                                                'POST',
                                                null,
                                                d._bases,
                                                h
                                            ),
                                            (d._bases = {})))
                                      : (d.win.push('Done! 0 new layouts to scan'), d.win.push('')))
                                : !1 === d._scanning && !1 === d._abort && d.win.push('Scan');
                        },
                        getBaseLayout: function(c) {
                            var f = ClientLib.Data.MainData.GetInstance(),
                                b = f.get_Player().get_Name(),
                                l = f.get_Server().get_WorldId(),
                                f = f.get_Alliance().get_Id();
                            if (!d._abort)
                                if (void 0 === c)
                                    (d._abort = !1),
                                        (d._scanning = !1),
                                        !1 === d._abort && d.done(),
                                        h('[BaseScanner] base undefined');
                                else {
                                    d._lastBaseID !== c.selectedBaseID &&
                                        d.setCurrentBase(c.selectedBaseID);
                                    ClientLib.Data.MainData.GetInstance()
                                        .get_Cities()
                                        .set_CurrentCityId(c.id);
                                    var g = ClientLib.Data.MainData.GetInstance()
                                        .get_Cities()
                                        .GetCity(c.id);
                                    ClientLib.Net.CommunicationManager.GetInstance().UserAction();
                                    if (g.get_IsGhostMode()) return d.scanNextBase();
                                    if (0 === g.GetBuildingsConditionInPercent())
                                        return (
                                            c.failCount++,
                                            30 === c.failCount
                                                ? (h('[BaseScanner] max_fails'), d.scanNextBase())
                                                : setTimeout(function() {
                                                      d.getBaseLayout(c);
                                                  }, 99)
                                        );
                                    var n = g.get_Name();
                                    c.layout = d.getLayout(g);
                                    c.name = n;
                                    d._bases[c.x + ':' + c.y] = c;
                                    d.basecounter++;
                                    g = CncEcoScanner.Layout.window.getInstance();
                                    !0 !== g.active &&
                                        ((g.active = !0),
                                        g.openWindow('CncEco Scan result', null, 1));
                                    4 < d.basecounter &&
                                        ((d.basecounter = 0),
                                        g.FO(d._bases),
                                        d.xhr.send(
                                            'https://cnc-eco.herokuapp.com/api/v1/layouts?pl=' +
                                                b +
                                                '&w=' +
                                                l +
                                                '&a=' +
                                                f,
                                            'POST',
                                            null,
                                            d._bases,
                                            h
                                        ),
                                        (d._bases = {}));
                                    ClientLib.Data.MainData.GetInstance()
                                        .get_Server()
                                        .get_WorldId();
                                    ClientLib.Data.MainData.GetInstance()
                                        .get_Player()
                                        .get_Name();
                                    d._count++;
                                    d.printScanResults(c);
                                    d.done();
                                    d.scanNextBase();
                                }
                        },
                        scanNextBase: function() {
                            !0 !== d._abort &&
                                (void 0 === d.index ? (d.index = 0) : d.index++,
                                d.getBaseLayout(d._toScan[d.index]));
                        },
                        isScanning: function() {
                            return !0 === d._scanning;
                        },
                        printScanResults: function(c) {
                            d.win.delall();
                            if (!1 === d._abort)
                                switch (d.wincounter) {
                                    case 0:
                                        d.wincounter++;
                                        d.win.push('Scanning');
                                        break;
                                    case 1:
                                        d.wincounter++;
                                        d.win.push('Scanning.');
                                        break;
                                    case 2:
                                        d.wincounter++;
                                        d.win.push('Scanning..');
                                        break;
                                    case 3:
                                        d.wincounter = 0;
                                        d.win.push('Scanning...');
                                        break;
                                    default:
                                        d.win.push('Scanning');
                                }
                            else d.win.push('Scanning');
                            d.win.push(('   ' + d.index).slice(-3) + '/' + d._toScan.length);
                            d.win.push('', d.button());
                        },
                        getLayout: function(c) {
                            for (var f = [], b = 0; 16 > b; b++)
                                for (var d = 0; 9 > d; d++)
                                    switch (c.GetResourceType(d, b)) {
                                        case 0:
                                            f.push('.');
                                            break;
                                        case 1:
                                            f.push('c');
                                            break;
                                        case 2:
                                            f.push('t');
                                            break;
                                        case 4:
                                            f.push('j');
                                            break;
                                        case 5:
                                            f.push('h');
                                            break;
                                        case 6:
                                            f.push('l');
                                            break;
                                        case 7:
                                            f.push('k');
                                    }
                            return f.join('');
                        },
                        setCurrentBase: function(c) {
                            var f = ClientLib.Data.MainData.GetInstance()
                                .get_Cities()
                                .get_AllCities().d[c];
                            ClientLib.Vis.VisMain.GetInstance().CenterGridPosition(
                                f.get_PosX(),
                                f.get_PosY()
                            );
                            ClientLib.Vis.VisMain.GetInstance().Update();
                            ClientLib.Vis.VisMain.GetInstance().ViewUpdate();
                            d._lastBaseID = c;
                        },
                        startup: function() {
                            r.patch();
                            phe.cnc.Util.attachNetEvent(
                                ClientLib.Vis.VisMain.GetInstance(),
                                'ViewModeChange',
                                ClientLib.Vis.SelectionChange,
                                d,
                                d.onSelectionChange
                            );
                        },
                        destroy: function() {
                            phe.cnc.Util.detachNetEvent(
                                ClientLib.Vis.VisMain.GetInstance(),
                                'ViewModeChange',
                                ClientLib.Vis.SelectionChange,
                                d,
                                d.onSelectionChange
                            );
                        },
                        onSelectionChange: function() {
                            try {
                                if (!d.isScanning() && !0 !== d._abort) {
                                    d.failCount = 0;
                                    d._bases = {};
                                    d._count = 0;
                                    d._done = 0;
                                    d.index = -1;
                                    d._toScanMap = {};
                                    d._toScan = [];
                                    void 0 !== d.selectionChange &&
                                        (clearTimeout(d.selectionChange),
                                        (d.selectionChange = void 0));
                                    var c = ClientLib.Vis.VisMain.GetInstance().get_SelectedObject(),
                                        c = ClientLib.Data.MainData.GetInstance()
                                            .get_Cities()
                                            .get_CurrentCity();
                                    if (
                                        null !== c &&
                                        !0 ===
                                            ClientLib.Data.MainData.GetInstance()
                                                .get_Cities()
                                                .get_CurrentCity()
                                                .IsNPC()
                                    ) {
                                        for (id in d._scanned)
                                            if (d._scanned[id] == c.get_Id()) {
                                                console.log('already scanned');
                                                return;
                                            }
                                        d._scanned.push(c.get_Id());
                                        d.scanCurrentBase();
                                    }
                                }
                            } catch (f) {
                                console.log(f);
                            }
                        },
                        scanCurrentBase: function() {
                            var c = ClientLib.Data.MainData.GetInstance().get_Cities(),
                                f = c.get_CurrentCity(),
                                b = c.get_CurrentOwnCity();
                            d.failCount++;
                            if (!(30 < d.failCount)) {
                                if (null === f)
                                    return (
                                        h('base = 0'),
                                        (d.selectionChange = setTimeout(d.scanCurrentBase, 100)),
                                        d.selectionChange
                                    );
                                void 0 !== d.selectionChange &&
                                    (clearTimeout(d.selectionChange), (d.selectionChange = void 0));
                                var c = f.get_PosX(),
                                    l = f.get_PosY();
                                f.get_Id();
                                if (f.get_IsGhostMode()) d.failCount = 0;
                                else if (0 === f.GetBuildingsConditionInPercent())
                                    d.selectionChange = setTimeout(d.scanCurrentBase, 100);
                                else {
                                    d.failCount = 0;
                                    var g = ClientLib.Data.MainData.GetInstance(),
                                        n = g.get_Player().get_Name(),
                                        q = g.get_Server().get_WorldId(),
                                        g = g.get_Alliance().get_Id(),
                                        k = ClientLib.Base.Util.CalculateDistance(
                                            f.get_PosX(),
                                            f.get_PosY(),
                                            b.get_PosX(),
                                            b.get_PosY()
                                        ),
                                        b = {
                                            x: f.get_PosX(),
                                            y: f.get_PosY(),
                                            level: f.get_BaseLevel(),
                                            id: f.get_Id(),
                                            distance: k,
                                            selectedBaseID: b.get_Id(),
                                            alliance: g,
                                            world: q,
                                            player: n,
                                            failCount: 0,
                                        },
                                        k = f.get_Name();
                                    b.layout = d.getLayout(f);
                                    b.name = k;
                                    b.alliance = ClientLib.Data.MainData.GetInstance()
                                        .get_Alliance()
                                        .get_Id();
                                    d._bases[c + ':' + l] = b;
                                    d._selectionBases[c + ':' + l] = b;
                                    ClientLib.Data.MainData.GetInstance()
                                        .get_Server()
                                        .get_WorldId();
                                    ClientLib.Data.MainData.GetInstance()
                                        .get_Player()
                                        .get_Name();
                                    ClientLib.Data.MainData.GetInstance()
                                        .get_Alliance()
                                        .get_Id();
                                    d.xhr.send(
                                        'https://cnc-eco.herokuapp.com/api/v1/layouts?pl=' +
                                            n +
                                            '&w=' +
                                            q +
                                            '&a=' +
                                            g,
                                        'POST',
                                        null,
                                        d._bases,
                                        h
                                    );
                                }
                            }
                        },
                    },
                });
                qx.Class.define('CncEcostorage', {
                    type: 'singleton',
                    extend: qx.core.Object,
                    members: {
                        get: function(c) {
                            c = localStorage.getItem('CncEco:' + c);
                            return null === c ? c : JSON.parse(c);
                        },
                        set: function(c, f) {
                            if (null === f || void 0 === f) return l.storage.remove(c);
                            'string' !== typeof f && (f = JSON.stringify(f));
                            return localStorage.setItem('CncEco:' + c, f);
                        },
                        remove: function(c) {
                            return localStorage.removeItem('CncEco:' + c);
                        },
                        initialize: function() {
                            try {
                                h('CncEcostorage loadet');
                            } catch (c) {
                                h(c);
                            }
                        },
                    },
                });
                qx.Class.define('CncEcoReports', {
                    type: 'singleton',
                    extend: qx.core.Object,
                    statics: {
                        ResourceTypes: {},
                    },
                    defer: function(statics) {
                        // var fileManager = ClientLib.File.FileManager.GetInstance();
                        statics.ResourceTypes[
                            ClientLib.Base.EResourceType.Tiberium
                            ] = 1; // fileManager.GetPhysicalPath('ui/common/icn_res_tiberium.png');
                        statics.ResourceTypes[
                            ClientLib.Base.EResourceType.Crystal
                            ] = 1; // fileManager.GetPhysicalPath('ui/common/icn_res_chrystal.png');
                        statics.ResourceTypes[
                            ClientLib.Base.EResourceType.Gold
                            ] = 1; // fileManager.GetPhysicalPath('ui/common/icn_res_dollar.png');
                        statics.ResourceTypes[
                            ClientLib.Base.EResourceType.Power
                            ] = 1; // fileManager.GetPhysicalPath('ui/common/icn_res_power.png');
                        statics.ResourceTypes[
                            ClientLib.Base.EResourceType.ResearchPoints
                            ] = 1; // fileManager.GetPhysicalPath('ui/common/icn_res_research.png');
                        // const savedReports = CncEcostorage.getInstance().get('reports') || {}
                        // const date = new Date();
                        // date.setDate(date.getDate() - 15);
                        //
                        // Object.keys(savedReports).forEach(id => {
                        //     console.log(id, savedReports[id], data)
                        // })
                        //
                        // CncEcostorage.getInstance().set('reports', savedReports)
                    },
                    members: {
                        reports: null,
                        newReports: [],
                        init: function() {
                            this.destroy()
                            const reports = ClientLib.Data.MainData.GetInstance().get_Reports();
                            this.reports = reports;
                            console.log('init reports', reports)

                            phe.cnc.Util.attachNetEvent(
                                reports,
                                'ReportsDelivered',
                                ClientLib.Data.Reports.ReportsDelivered,
                                this,
                                this.onReportsDelivered
                            );
                        },
                        destroy: function() {
                            phe.cnc.Util.detachNetEvent(
                                ClientLib.Data.MainData.GetInstance().get_Reports(),
                                'ReportDelivered',
                                ClientLib.Data.Reports.ReportDelivered,
                                this,
                                this.onReportDelivered
                            );
                        } ,
                        onReportsDelivered: function(reports) {
                            console.log('all reports delivered');
                            const savedReports = CncEcostorage.getInstance().get('reports') || {}
                            // console.log('savedReports - before', savedReports)
                            this.newReports = []; // reset reports
                            reports.forEach(report => {
                                const id = report.get_Id()
                                if(!savedReports[id]) {
                                    savedReports[id] = report.get_Time()
                                    this.newReports.push(report)
                                }
                            })
                            CncEcostorage.getInstance().set('reports', savedReports)
                            // console.log('savedReports', savedReports)
                            console.log('newReports', this.newReports)
                            this.newReports.length && this.onAllReportsLoaded()
                        },

                        onAllReportsLoaded: function() {
                            console.time('onAllReportsLoaded')
                            // console.log('all loaded reports');
                            // console.log(this.newReports);
                            if (this.newReports.length > 0) {
                                // this.newReports.forEach(report => {
                                //     this.reports.RequestReportData(report);
                                // });

                                // var attackerBaseIds = [];
                                // var defenderBaseIds = [];
                                var repairTimeCosts = 0;
                                var minCommandPointCosts = 0;
                                var maxCommandPointCosts = 0;
                                // var firstAttack = null;
                                // var lastAttack = 0;

                                var loot = {};
                                var getTotalLootMethod, getRepairCostsMethod;

                                var reports = [];

                                // off
                                const { CombatReport } = ClientLib.Data.Reports;
                                if (
                                    this.newReports[0].get_PlayerReportType() ===
                                    ClientLib.Data.Reports.EPlayerReportType.CombatOffense
                                ) {
                                    getTotalLootMethod =
                                        CombatReport.prototype.GetAttackerTotalResourceReceived;
                                    getRepairCostsMethod = CombatReport.prototype.GetAttackerRepairCosts;
                                }
                                // def
                                else {
                                    getTotalLootMethod =
                                        CombatReport.prototype.GetDefenderTotalResourceCosts;
                                    getRepairCostsMethod = CombatReport.prototype.GetDefenderRepairCosts;
                                }

                                // init sever configs for cp costs
                                var server = ClientLib.Data.MainData.GetInstance().get_Server();
                                var player = ClientLib.Data.MainData.GetInstance().get_Player();
                                var combatCostMinimum = server.get_CombatCostMinimum();
                                var combatCostMinimumPvP = server.get_UsesRebalancingI()
                                    ? server.get_PvPCombatCostMinimum()
                                    : combatCostMinimum;
                                var combatCostPerFieldInside = server.get_CombatCostPerField();
                                var combatCostPerFieldOutside = server.get_CombatCostPerFieldOutsideTerritory();

                                // console.log({player, server})

                                // loop through all reports
                                for (var i = 0; i < this.newReports.length; i++) {
                                    var report = this.newReports[i];
                                    // console.log({ report });

                                    var rapport = {};
                                    rapport.id = report.get_Id();

                                    if (!(report instanceof CombatReport)) {
                                        continue;
                                    }

                                    rapport.attackerBaseId = report.get_AttackerBaseId();
                                    rapport.defenderBaseId = report.get_DefenderBaseId();

                                    // if (attackerBaseIds.indexOf(report.get_AttackerBaseId()) === -1) {
                                    //     attackerBaseIds.push(report.get_AttackerBaseId());
                                    // }
                                    //
                                    // if (defenderBaseIds.indexOf(report.get_DefenderBaseId()) === -1) {
                                    //     defenderBaseIds.push(report.get_DefenderBaseId());
                                    // }

                                    // add repair time
                                    repairTimeCosts += report.GetAttackerMaxRepairTime();
                                    rapport.maxRep = report.GetAttackerMaxRepairTime();
                                    rapport.infRep = report.GetAttackerInfantryRepairCosts();
                                    rapport.vehRep = report.GetAttackerVehicleRepairCosts();
                                    rapport.airRep = report.GetAttackerAirRepairCosts();

                                    var distance = Math.sqrt(
                                        Math.pow(
                                            report.get_AttackerBaseXCoord() -
                                            report.get_DefenderBaseXCoord(),
                                            2
                                        ) +
                                        Math.pow(
                                            report.get_AttackerBaseYCoord() -
                                            report.get_DefenderBaseYCoord(),
                                            2
                                        )
                                    );

                                    rapport.distance = distance; // total distane between coords
                                    let cost
                                    switch (report.get_Type()) {
                                        case ClientLib.Data.Reports.EReportType.Combat: // 1, pvp
                                            var isFriendlyTerritory =
                                                report.get_AttackerAllianceName() ===
                                                report.get_DefenderAllianceName();
                                            cost = Math.floor(
                                                combatCostMinimumPvP +
                                                (isFriendlyTerritory
                                                    ? combatCostPerFieldInside
                                                    : combatCostPerFieldOutside) *
                                                distance
                                            );
                                            // minCommandPointCosts += cost;
                                            // maxCommandPointCosts += cost;
                                            rapport.def = true;
                                            rapport.minCp = cost;
                                            rapport.maxCp = cost;
                                            break;
                                        case ClientLib.Data.Reports.EReportType.NPCRaid: // 2, pvp
                                            switch (parseInt(report.get_DefenderBaseName(), 10)) {
                                                case ClientLib.Data.Reports.ENPCCampType.Base: // 4
                                                case ClientLib.Data.Reports.ENPCCampType.Fortress: // 6
                                                    cost = Math.floor(
                                                        combatCostMinimum +
                                                        combatCostPerFieldOutside * distance
                                                    );
                                                    // minCommandPointCosts += cost;
                                                    // maxCommandPointCosts += cost;
                                                    rapport.off = true;
                                                    rapport.minCp = cost;
                                                    rapport.maxCp = cost;
                                                    break;
                                                default:
                                                    const minCp = Math.floor(
                                                        combatCostMinimum +
                                                        combatCostPerFieldInside * distance
                                                    );
                                                    const maxCp = Math.floor(
                                                        combatCostMinimum +
                                                        combatCostPerFieldOutside * distance
                                                    );
                                                    // minCommandPointCosts += minCp;
                                                    // maxCommandPointCosts += maxCp;
                                                    rapport.off = true;
                                                    rapport.minCp = minCp;
                                                    rapport.maxCp = maxCp;
                                            }
                                            break;
                                        case ClientLib.Data.Reports.EReportType.NPCPlayerCombat: // 5
                                            // No repair time or command point cost for Forgotten attacks
                                            break;
                                        default:
                                            throw 'Unexpected report type (' + report.get_Type() + ')';
                                    }

                                    rapport.time = report.get_Time();

                                    /**
                                     @discroption: calc the loot with out the rep res costs
                                     */
                                    for (var resourceType in CncEcoReports.ResourceTypes) {
                                        var resourceCount =
                                            getTotalLootMethod.call(report, resourceType) -
                                            getRepairCostsMethod.call(report, resourceType);

                                        if (resourceCount !== 0) {
                                            if (!(resourceType in loot)) {
                                                loot[resourceType] = 0;
                                            }

                                            loot[resourceType] += resourceCount;
                                        }
                                    }
                                    rapport.loot = loot;

                                    reports.push(rapport);
                                }

                                // console.log({
                                //     server,
                                //     player,
                                //     combatCostMinimum,
                                //     combatCostMinimumPvP,
                                //     combatCostPerFieldInside,
                                //     combatCostPerFieldOutside,
                                //
                                //     minCommandPointCosts,
                                //     maxCommandPointCosts,
                                //     // firstAttack,
                                //     // lastAttack,
                                //     getTotalLootMethod,
                                //     getRepairCostsMethod,
                                //
                                //     // attackerBaseIds, // id off attacker bases, the player pvp attacker maybe
                                //     // defenderBaseIds,    // id of defender bases, the bases who got attacked, maybe the player also in pvp
                                //
                                //     repairTimeCosts, // total time in s
                                //     loot, //
                                // });
                                //
                                // console.warn('All reports');

                                fetch('https://cnc-eco.herokuapp.com/api/v1/reports/update', {
                                // fetch('http://localhost:8000/api/v1/reports/update', {
                                    method: 'POST',
                                    headers: {
                                        "content-type": "application/json",
                                    },
                                    body: JSON.stringify({
                                        reports,
                                        world: server.get_WorldId(),
                                        player: player.get_Name(),
                                        playerId: player.get_Id(),
                                        accountId: player.get_AccountId(),
                                    })
                                }).then(async r => {
                                    const data = await r.json()
                                    console.log('all reports delivered', reports, data)
                                }).catch(e => console.warn(e))
                            }
                            console.timeEnd('onAllReportsLoaded')
                        },

                        initialize: function() {
                            this.init();
                            try {
                                h('CncEcoReports loaded');
                            } catch (c) {
                                h(c);
                            }
                        },
                    },
                });
                qx.Class.define('CncEcoxhr', {
                    type: 'singleton',
                    extend: qx.core.Object,
                    members: {
                        send: function(c, f) {
                            var b = new qx.bom.request.Xhr()._createNativeXhr();
                            b.timeout = 3e3;
                            b.onload = function() {
                                1 == b.responseText
                                    ? h('CncEcoxhr Send true!')
                                    : 0 == b.responseText
                                    ? h('CncEcoxhr is Error :: ' + b.responseText)
                                    : 1 !== b.responseText;
                                b.abort();
                            };
                            b.ontimeout = function() {
                                h('xhr timeout');
                                b.abort();
                            };
                            b.onloadend = function() {
                                h('xhr timeout');
                                b.abort();
                            };
                            b.open('POST', c, !0);
                            b.setRequestHeader('Method', 'POST');
                            b.setRequestHeader('Content-Type', 'application/json');
                            b.send(JSON.stringify(f));
                        },
                        initialize: function() {
                            try {
                                h('CncEcoxhr loadet');
                            } catch (c) {
                                h(c);
                            }
                        },
                    },
                });
                l.xhr = {
                    _load: !1,
                    _xhr: null,
                    _timeout: 3e3,
                    start: function() {
                        var c = null;
                        if (window.XMLHttpRequest) c = new XMLHttpRequest();
                        else if (window.ActiveXObject)
                            try {
                                c = new ActiveXObject('Msxml2.XMLHTTP.6.0');
                            } catch (f) {
                                try {
                                    c = new ActiveXObject('Msxml2.XMLHTTP.3.0');
                                } catch (b) {
                                    h(b);
                                }
                            }
                        if (null === c) return !1;
                        l.xhr._load = !0;
                        l.xhr._xhr = c;
                        l.xhr._xhr.timeout = l.xhr._timeout;
                        return l.xhr._load;
                    },
                    send: function(c, f, b, d, g) {
                        try {
                            if (null !== l.xhr._xhr)
                                if (!1 !== l.xhr._load && null !== l.xhr._xhr) {
                                    l.xhr._xhr.open(f, c, !0);
                                    if (null !== b && 'object' == typeof b)
                                        for (var n in b)
                                            b[n].hasOwnProperty('name') &&
                                                b[n].hasOwnProperty('value') &&
                                                l.xhr._xhr.setRequestHeader(b[n].name, b[n].value);
                                    l.xhr._xhr.onload = function() {
                                        try {
                                            4 == l.xhr._xhr.readyState &&
                                                200 == l.xhr._xhr.status &&
                                                'function' == typeof g &&
                                                g(l.xhr._xhr.responseText);
                                        } catch (q) {
                                            h(q);
                                        }
                                    };
                                    null !== d
                                        ? ('stringify' == JSON.isjson(d) &&
                                              !0 === Array.isarray(d)) ||
                                          (!0 === Object.isobj(d) && 'stringify' == JSON.isjson(d))
                                            ? l.xhr._xhr.send(JSON.stringify(d))
                                            : h(e)
                                        : l.xhr._xhr.send(null);
                                } else alert('Ihr Browser unterstuetzt kein Ajax!');
                        } catch (q) {
                            h(q);
                        }
                    },
                };
                qx.Class.define('CncEcoScanner.Layout.window', {
                    type: 'singleton',
                    extend: qx.ui.window.Window,
                    construct: function() {
                        try {
                            this.base(arguments),
                                this.setWidth(925),
                                this.setHeight(700),
                                this.setContentPadding(10),
                                this.setShowMinimize(!1),
                                this.setShowMaximize(!0),
                                this.setShowClose(!0),
                                this.setResizable(!0),
                                this.setAllowMaximize(!0),
                                this.setAllowMinimize(!1),
                                this.setAllowClose(!0),
                                this.setShowStatusbar(!1),
                                this.setDecorator(null),
                                this.setPadding(10),
                                this.setLayout(new qx.ui.layout.Grow()),
                                this.addListener(
                                    'close',
                                    function() {
                                        this.active = !1;
                                        this.row = 0;
                                        this.ZW = [];
                                        this.removeAll();
                                        this.ZZ = new qx.ui.container.Scroll();
                                        this.ZY = new qx.ui.container.Composite(
                                            new qx.ui.layout.Flow()
                                        );
                                        this.add(this.ZZ, { flex: 3 });
                                        this.ZZ.add(this.ZY);
                                    },
                                    this
                                ),
                                (this.ZW = []),
                                this.removeAll(),
                                (this.ZZ = new qx.ui.container.Scroll()),
                                (this.ZY = new qx.ui.container.Composite(new qx.ui.layout.Flow())),
                                this.add(this.ZZ, { flex: 3 }),
                                this.ZZ.add(this.ZY);
                        } catch (c) {
                            console.debug('CncEcoScanner.Layout.window construct: ', c);
                        }
                    },
                    members: {
                        ZW: null,
                        ZZ: null,
                        ZY: null,
                        ZX: null,
                        row: 0,
                        openWindow: function(c, f, b) {
                            try {
                                '' !== c && this.setCaption(c),
                                    this.isVisible() && null === f
                                        ? this.close()
                                        : null !== b
                                        ? (this.open(), this.moveTo(30, 100))
                                        : (this.open(),
                                          this.moveTo(30, 100),
                                          null !== f ? this.FO(f) : this.FO());
                            } catch (S) {
                                console.log('CncEcoScanner.Layout.window.openWindow: ', S);
                            }
                        },
                        listener: function(c) {
                            var f = qx.core.Init.getApplication();
                            f.getBackgroundArea().closeCityInfo();
                            f.getPlayArea().setView(
                                ClientLib.Data.PlayerAreaViewMode.pavmCombatSetupDefense,
                                c,
                                0,
                                0
                            );
                            f = ClientLib.Data.MainData.GetInstance()
                                .get_Cities()
                                .get_CurrentOwnCity();
                            null != f &&
                                f.get_CityArmyFormationsManager().set_CurrentTargetBaseId(c);
                        },
                        FO: function(c) {
                            try {
                                if (!0 !== this.active)
                                    return setTimeout(function() {
                                        this.openWindow('', c);
                                    }, 90);
                                var f = {
                                        '.':
                                            'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAADUExURQAAAKd6PdoAAAABdFJOUwBA5thmAAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==',
                                        c:
                                            'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAMAAABF0y+mAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAGMUExURQAAAJvj+p3l+57m+5vj+prj+p7m+5nh+pni+pri+pni+pri+pvj+5ri+pzl+57n+57m+5ff+Z7m+5nh+qDv/Zvj+57m+6Hr/KL6/pni+p30/Zrl+53z/aLt/KL9/pf0/Zn3/Zv4/pfr+6L0/Zf3/Z7n+5fs+6L1/Zf6/qL8/qL2/pfm+qLw/AlQf5n8/BJVbwlTq3HQ05P29wRFaGzY3hZnhAtRn4zu7h2JtBVxnQMtShFidgZMdQdIk5/9/gY7eQI5YAY9lgY6QghmnAZIUQtUlUe26RmQzwhHXAqAvBFzwg9WjRXM4AtpkTGZowtbZwQscWSt3SuF2SiKk3/j5pLb8WD29UiZpFzR1VzP4htnmjS0xiVpdR2VswpIiSCb6Tap6Ac1g33s7kCq0CeDswQxYjSx2cf2/GrQ6x5mrGfH8izk9UzCyzWEmyuouw+XpAuPyi6ApDqLkF7GzWS9wxbD8TKJzEmPwB+x7ShDQRS90zKGmXHl9wdYtX3M6KHo+k6stWzoymS0yB9GXksjNTkAAAAzdFJOUwAHHxQLFxsBBQMkDQkoMUZCTyw3fBA9VOVYqWWhS/W53sh3sM9ok43r2b52cP///////t3sG3QAAAIISURBVCjPrZJVc9tAFEazwpVkkRljOw23smzZlpkZYjvMzFBmTOGPd5VkAtO+dKb3UWe+785dnaGhfxgazd8Jw0ATQQDIPOQ0AwEAhI2kMIy0EfBBBKLvCJgtksdq4UmCuZeDNooVJbvoGPMvRPyimQR3xQxBCVYt5LY+ckbWkwm3yHJ3UYibfVNHmyHnwupSvfE0MWIhb7fSJkzyxpZ29rW1xcW5udRyUEbRm2KG4x1TK1p9O7ZWa8/OJjcSjy0kuKEMLow568c7794fhPVOPK4mxmXeBq7XQkrKx051vVR4Ga4pivJZC3jtmA1et7KO/MZhKVwqbClKLhv9Hll+My6QwGAAFzzTkfRgd1dVy9Fcpv3tx+r+qISZjFIOEyece83BYGbzeTodz54eX54dTMosgSAKPgldrMd/9T91u61oOqe3z05mQjLPGUdS9umLlLqlds/P31aKh/rX2s8jBI0kTWBivpct6J3Glw/blWIh11H6/VdBu7GTIbCJlUyxFC5+TDVeVNRqtdXqRUZHzDg6hTFRPi2WiSrJeLmZypab0eTJpNclUMbb0wDnHW6tF8sP7z3LVOfnX4f8HhExSF+dQpkla9BrRT9seDgQcHtkC0sSVwxZwJFIAbsk+hwul0uWBJbkIHPrD+BsOEliGMvzPEvhHLhvGI38YiAESD3C9Id8/31+A0POUa1xABFzAAAAAElFTkSuQmCC',
                                        t:
                                            'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAMAAABF0y+mAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAGbUExURQAAAJri+pvj+prj+pnh+pjg+prj+pjh+pri+pzk+5rj+pni+pzl+5ri+pjh+pnh+prj+pnh+pni+pni+pjw/Jzl+5/s/Jrn+5ff+Zzl+5fz/Z/p/Jzw/Zf0/Jrm+5r3/aL4/Zfh+p7t/Jvt/Jv1/Zfv/Jvw/Jf6/aL6/gtsLQ6IVBKiXghkNm/Sw5H49ARQHJj7+g+FNwhdLYzx7ByrThCNQXvo1w1/OAt2NSvNZhKgRxCdURFyPAdlJRe/ZA2TToPt4y+yZxBsNh2YXA6RW2jcvxW3TTXykCqAWkachqD+/oLk3UeogUCeeWDEplSxnCJwVBKlWBqPNwMyFA2SKAqAUhyGPn71qDSTYhxfPC/liFHFdiTjbqr4sFnFiyCWSRCaQzrCfg1/Rz3ubGj0sVbTp7v7yBC8LBvmNBNKOSrtbxLKKV7xgkvenV3AoHzZzk6/mFHXTAtXLGndrVq5Wcr8zUvvjF+9e2HkmnTmr0fWem7m0C2nfxnVSFKPbRvUakbehimOUz3ORRbDbmveyTnfjnH1hFnMph+1ZunFEtoAAAApdFJOUwAUEBgJCw4CBAYkKC4bPR80RzddoExze1NB0FWIxWrv1GWUmdyvu93GYZ5Q7AAAAgFJREFUKM+tUtVy2wAQjJhZZrZjJ5LMzAxhJoeZy8zc767kNqk7zVOn+3g7eze3uyMj/wcYhuvA7poSBAICEAAixB80TsAoCAAMSYsiTzEoMawjQIikad5mkuSxoEPkUHxIiHK0edzpNvu92cZ9lyQy8O/FBMQ74gdZrzf+5NFR+oHLSoG3UgylTKHOUSFVL+ys9wpr004Wur2KA6I5/vl779vXva3N4+3ijN1KoTcPEYwQqF+f9o5PtHR6q7u04TGzDPJrMUw6xt9s7lZbbxvVUiKRn/UE3TSEDKQ4SJujfVX7oqmt4mIpo8xFIymJAvDBk5DNMjURbmtqrhkr1fL7L56mOzLLwMZFkHL4PZOPV9XESmW5vJZ/9Wzn+YnLROokBjOscyp70FxQzq7OcrGyuvFy/XXLY6UQ40nSFN9dShz2r87P32XCYW2xcVrIxK2kQYK0L6qUD9XM5fXldjPZ1mr5vZWJMYGDB6Q8p6y2tYv3Hz90c+GkUswpkyk/b5ike+eMLITVWvKiv99txmKV6r2U3cKSRjIYwrFydDb5MBv5lKwsx5SZ+mhAYklgEAwBUDaLfdoeckU78/ORyKjsM/Ec+DM0HIFIUXBLPrcl6ArJAUngSQC58R2HQYgjKZpnbYIgsDQHDJcI0ysEI3qJGB0ACBPYHb00+vd3Mf8JPwDEQVFKmgSbiAAAAABJRU5ErkJggg==',
                                    },
                                    b,
                                    d = CncEcoScanner.getInstance()._bases;
                                null !== c && (d = c);
                                for (b in d) {
                                    var g = d[b].layout,
                                        n = g.match(/t/g).length,
                                        l = g.match(/c/g).length;
                                    switch (
                                        ClientLib.Data.MainData.GetInstance()
                                            .get_Player()
                                            .get_Faction()
                                    ) {
                                        case ClientLib.Base.EFactionType.GDIFaction:
                                            var k = 'G';
                                            break;
                                        case ClientLib.Base.EFactionType.NODFaction:
                                            k = 'N';
                                    }
                                    for (
                                        var h =
                                                'https://www.cnc-eco.de/b/map=2|' +
                                                k +
                                                '|' +
                                                k +
                                                '||' +
                                                g +
                                                '....................................|newEconomy',
                                            p =
                                                '<table border="2" cellspacing="0" cellpadding="0" onclick="CncEcoScanner.Layout.window.getInstance().listener(' +
                                                d[b].id +
                                                ')">',
                                            p =
                                                p +
                                                ('<tr><td colspan="9"><font color="#FFF">' +
                                                    d[b].x +
                                                    ':' +
                                                    d[b].y +
                                                    '&nbsp;&nbsp;<img width="14" height="14" src="' +
                                                    f.t +
                                                    '"> ' +
                                                    n +
                                                    ' &nbsp;&nbsp; <img width="14" height="14" src="' +
                                                    f.c +
                                                    '"> ' +
                                                    l +
                                                    '</font></td></tr>'),
                                            r = 0;
                                        72 > r;
                                        r++
                                    ) {
                                        var x = r - 9 * Math.floor(r / 9);
                                        0 == x && (p += '<tr>');
                                        p +=
                                            '<td><img width="14" height="14" src="' +
                                            f[g.charAt(r)] +
                                            '"></td>';
                                        8 == x && (p += '</tr>');
                                    }
                                    p +=
                                        '</table><a href="' +
                                        h +
                                        '" target="_blank" style="color:#FFFFFF;">CnCEco';
                                    this.resourceLayout = new qx.ui.basic.Label().set({
                                        backgroundColor: '#303030',
                                        value: p,
                                        padding: 10,
                                        rich: !0,
                                    });
                                    7 == n
                                        ? this.resourceLayout.setBackgroundColor('#202820')
                                        : 5 == n &&
                                          this.resourceLayout.setBackgroundColor('#202028');
                                    this.ZW.push(this.resourceLayout);
                                }
                                this.ZY.removeAll();
                                k = 0;
                                this.row > k && (k = this.row);
                                for (a = f = 0; a < this.ZW.length; a++)
                                    this.ZY.add(this.ZW[a], { row: k, column: f }),
                                        f++,
                                        5 < f && ((f = 0), k++, this.row++);
                            } catch (m) {
                                console.log(m);
                            }
                        },
                    },
                });
                qx.Class.define('CncEcoHIDE.window.container', {
                    extend: qx.ui.container.Composite,
                    construct: function(c) {
                        try {
                            qx.ui.container.Composite.call(this);
                            this.set({
                                layout: new qx.ui.layout.VBox(5),
                                padding: 5,
                                decorator: 'pane-light-opaque',
                            });
                            switch (c) {
                                case 'o':
                                    console.log('add container o');
                                    this.add(
                                        new qx.ui.basic.Label('Hide Outposts').set({
                                            alignX: 'center',
                                            font: 'font_size_14_bold',
                                        })
                                    );
                                    var f = new qx.ui.container.Composite(new qx.ui.layout.HBox(5));
                                    f.add(
                                        new qx.ui.basic.Label(this.tr('level < ')).set({
                                            alignY: 'middle',
                                        })
                                    );
                                    f.add(
                                        (this.oLevel = new qx.ui.form.Spinner(1).set({
                                            maximum: 65,
                                            minimum: 1,
                                        }))
                                    );
                                    this.oLevel.addListener('changeValue', this.onInputo, this);
                                    f.add(
                                        (this.btnLevelo = new qx.ui.form.Button('del').set({
                                            toolTipText: 'delete outposts from view',
                                        }))
                                    );
                                    this.btnLevelo.addListener('execute', this.delo, this);
                                    f.add(
                                        (this.btnhideo = new qx.ui.form.Button('hide').set({
                                            toolTipText: 'hide targetinfo from view',
                                        }))
                                    );
                                    this.btnhideo.addListener('execute', this.hideo, this);
                                    this.add(f);
                                    break;
                                case 'c':
                                    console.log('add container c');
                                    this.add(
                                        new qx.ui.basic.Label('Hide Camps').set({
                                            alignX: 'center',
                                            font: 'font_size_14_bold',
                                        })
                                    );
                                    f = new qx.ui.container.Composite(new qx.ui.layout.HBox(5));
                                    f.add(
                                        new qx.ui.basic.Label(this.tr('level < ')).set({
                                            alignY: 'middle',
                                        })
                                    );
                                    f.add(
                                        (this.cLevel = new qx.ui.form.Spinner(1).set({
                                            maximum: 65,
                                            minimum: 1,
                                        }))
                                    );
                                    this.cLevel.addListener('changeValue', this.onInputc, this);
                                    f.add(
                                        (this.btnLevelc = new qx.ui.form.Button('del').set({
                                            toolTipText: 'delete camps from view',
                                        }))
                                    );
                                    this.btnLevelc.addListener('execute', this.delc, this);
                                    f.add(
                                        (this.btnhidec = new qx.ui.form.Button('hide').set({
                                            toolTipText: 'hide targetinfo from view',
                                        }))
                                    );
                                    this.btnhidec.addListener('execute', this.hidec, this);
                                    this.add(f);
                                    break;
                                case 'b':
                                    console.log('add container b');
                                    this.add(
                                        new qx.ui.basic.Label('Hide Bases').set({
                                            alignX: 'center',
                                            font: 'font_size_14_bold',
                                        })
                                    );
                                    f = new qx.ui.container.Composite(new qx.ui.layout.HBox(5));
                                    f.add(
                                        new qx.ui.basic.Label(this.tr('level < ')).set({
                                            alignY: 'middle',
                                        })
                                    );
                                    f.add(
                                        (this.bLevel = new qx.ui.form.Spinner(1).set({
                                            maximum: 47,
                                            minimum: 1,
                                        }))
                                    );
                                    this.bLevel.addListener('changeValue', this.onInputb, this);
                                    f.add(
                                        (this.btnLevelb = new qx.ui.form.Button('del').set({
                                            toolTipText: 'delete bases from view',
                                        }))
                                    );
                                    this.btnLevelb.addListener('execute', this.delb, this);
                                    f.add(
                                        (this.btnhideb = new qx.ui.form.Button('hide').set({
                                            toolTipText: 'hide targetinfo from view',
                                        }))
                                    );
                                    this.btnhideb.addListener('execute', this.hideb, this);
                                    this.add(f);
                                    break;
                                case 'p':
                                    console.log('add container p');
                                    this.add(
                                        new qx.ui.basic.Label('Hide Player').set({
                                            alignX: 'center',
                                            font: 'font_size_14_bold',
                                        })
                                    );
                                    f = new qx.ui.container.Composite(new qx.ui.layout.HBox(5));
                                    f.add(
                                        new qx.ui.basic.Label(this.tr('level < ')).set({
                                            alignY: 'middle',
                                        })
                                    );
                                    f.add(
                                        (this.pLevel = new qx.ui.form.Spinner(1).set({
                                            maximum: 65,
                                            minimum: 1,
                                        }))
                                    );
                                    this.pLevel.addListener('changeValue', this.onInputp, this);
                                    f.add(
                                        (this.btnLevelp = new qx.ui.form.Button('del').set({
                                            toolTipText: 'delete player from viev',
                                        }))
                                    );
                                    this.btnLevelp.addListener('execute', this.delp, this);
                                    f.add(
                                        (this.btnhidep = new qx.ui.form.Button('hide').set({
                                            toolTipText: 'hide targetinfo from view',
                                        }))
                                    );
                                    this.btnhidep.addListener('execute', this.hidep, this);
                                    this.add(f);
                                    break;
                                case 'reset':
                                    console.log('add container p');
                                    this.add(
                                        new qx.ui.basic.Label('Reset all').set({
                                            alignX: 'center',
                                            font: 'font_size_14_bold',
                                        })
                                    );
                                    f = new qx.ui.container.Composite(
                                        new qx.ui.layout.HBox(5, 'center')
                                    );
                                    f.add(
                                        (this.btnReset = new qx.ui.form.Button('reset').set({
                                            toolTipText: 'Reset view',
                                        }))
                                    );
                                    this.btnReset.addListener('execute', this.reset, this);
                                    this.add(f);
                                    break;
                                default:
                                    console.log('add container default'),
                                        this.add(
                                            new qx.ui.basic.Label('Hide all').set({
                                                alignX: 'center',
                                                font: 'font_size_14_bold',
                                            })
                                        ),
                                        (f = new qx.ui.container.Composite(
                                            new qx.ui.layout.HBox(5)
                                        )),
                                        f.add(
                                            new qx.ui.basic.Label(this.tr('level < ')).set({
                                                alignY: 'middle',
                                            })
                                        ),
                                        f.add(
                                            (this.aLevel = new qx.ui.form.Spinner(1).set({
                                                maximum: 65,
                                                minimum: 1,
                                            }))
                                        ),
                                        this.aLevel.addListener('changeValue', this.onInputa, this),
                                        f.add(
                                            (this.btnLevela = new qx.ui.form.Button('del').set({
                                                toolTipText: 'delete all targets from view',
                                            }))
                                        ),
                                        this.btnLevela.addListener('execute', this.dela, this),
                                        f.add(
                                            (this.btnhidea = new qx.ui.form.Button('hide').set({
                                                toolTipText: 'hide targetinfo from view',
                                            }))
                                        ),
                                        this.btnhidea.addListener('execute', this.hidea, this),
                                        this.add(f);
                            }
                            this.dirtySectors = {};
                        } catch (b) {
                            console.log(
                                'Error setting up CncEcoHIDE.window.container Constructor: '
                            ),
                                console.log(b.toString());
                        }
                    },
                    destruct: function() {},
                    members: {
                        dirtySectors: null,
                        oLevel: null,
                        btnHideCurrent: null,
                        btndelCurrent: null,
                        cLevel: null,
                        bLevel: null,
                        pLevel: null,
                        aLevel: null,
                        btnLevelo: null,
                        btnLevelc: null,
                        btnLevelb: null,
                        btnLevelp: null,
                        btnLevela: null,
                        btnReset: null,
                        btnhideo: null,
                        btnhidec: null,
                        btnhideb: null,
                        btnhidep: null,
                        btnhidea: null,
                        markDirty: function(c) {
                            c.get_Id() in this.dirtySectors ||
                                (this.dirtySectors[c.get_Id()] = { alliance: [], player: [] });
                        },
                        onTick: function() {
                            this.onInput();
                        },
                        onInputo: function() {
                            this.onInput('o');
                        },
                        onInputc: function() {
                            this.onInput('c');
                        },
                        onInputb: function() {
                            this.onInput('b');
                        },
                        onInputp: function() {
                            this.onInput('p');
                        },
                        onInputa: function() {
                            this.onInput('a');
                        },
                        hideo: function() {
                            this.hide('o');
                        },
                        hidec: function() {
                            this.hide('c');
                        },
                        hideb: function() {
                            this.hide('b');
                        },
                        hidep: function() {
                            this.hide('p');
                        },
                        hidea: function() {
                            this.hide('a');
                        },
                        delo: function() {
                            this.del('o');
                        },
                        delc: function() {
                            this.del('c');
                        },
                        delb: function() {
                            this.del('b');
                        },
                        delp: function() {
                            this.del('p');
                        },
                        dela: function() {
                            this.del('a');
                        },
                        onInput: function(c) {
                            switch (c) {
                                case 'o':
                                    var f = parseInt(this.oLevel.getValue(), 10);
                                    break;
                                case 'c':
                                    f = parseInt(this.cLevel.getValue(), 10);
                                    break;
                                case 'p':
                                    f = parseInt(this.pLevel.getValue(), 10);
                                    break;
                                case 'b':
                                    f = parseInt(this.bLevel.getValue(), 10);
                                    break;
                                case 'a':
                                    f = parseInt(this.aLevel.getValue(), 10);
                            }
                            console.log('value is ' + f + ' from ' + c);
                        },
                        del: function(c) {
                            for (
                                var f = ClientLib.Data.MainData.GetInstance()
                                        .get_Cities()
                                        .get_CurrentOwnCity(),
                                    b = f.get_X(),
                                    f = f.get_Y(),
                                    d = ClientLib.Data.MainData.GetInstance().get_World(),
                                    g = ClientLib.Vis.VisMain.GetInstance().get_Region(),
                                    n = b - 16;
                                n < b + 16;
                                n++
                            )
                                for (var l = f - 16; l < f + 16; l++) {
                                    var k = g.GetObjectFromPosition(
                                        n * g.get_GridWidth(),
                                        l * g.get_GridHeight()
                                    );
                                    if (null != k) {
                                        var h = d.GetWorldSectorByCoords(n, l);
                                        'function' === typeof k.get_BaseLevel &&
                                            (k.get_VisObjectType() ==
                                                ClientLib.Vis.VisObject.EObjectType.RegionNPCCamp &&
                                                (2 === k.get_CampType() &&
                                                    'c' == c &&
                                                    Math.floor(k.get_BaseLevel()) <
                                                        parseInt(this.cLevel.getValue(), 10) &&
                                                    (k.Dispose(), this.markDirty(h)),
                                                3 === k.get_CampType() &&
                                                    'o' == c &&
                                                    Math.floor(k.get_BaseLevel()) <
                                                        parseInt(this.oLevel.getValue(), 10) &&
                                                    (k.Dispose(), this.markDirty(h)),
                                                0 === k.get_CampType() &&
                                                    (k.Dispose(), this.markDirty(h))),
                                            k.get_VisObjectType() ==
                                                ClientLib.Vis.VisObject.EObjectType
                                                    .RegionCityType &&
                                                'p' == c &&
                                                Math.floor(k.get_BaseLevel()) <
                                                    parseInt(this.pLevel.getValue(), 10) &&
                                                !k.IsOwnBase() &&
                                                (k.Dispose(), this.markDirty(h)),
                                            k.get_VisObjectType() ==
                                                ClientLib.Vis.VisObject.EObjectType.RegionNPCBase &&
                                                'b' == c &&
                                                Math.floor(k.get_BaseLevel()) <
                                                    parseInt(this.bLevel.getValue(), 10) &&
                                                (k.Dispose(), this.markDirty(h)),
                                            'a' == c &&
                                                Math.floor(k.get_BaseLevel()) <
                                                    parseInt(this.aLevel.getValue(), 10) &&
                                                ('function' === typeof k.IsOwnBase
                                                    ? k.IsOwnBase() ||
                                                      (k.Dispose(), this.markDirty(h))
                                                    : (k.Dispose(), this.markDirty(h))));
                                    }
                                }
                            console.log(this.dirtySectors);
                        },
                        hide: function(c) {
                            for (
                                var f = ClientLib.Data.MainData.GetInstance()
                                        .get_Cities()
                                        .get_CurrentOwnCity(),
                                    b = f.get_X(),
                                    f = f.get_Y(),
                                    d = ClientLib.Vis.VisMain.GetInstance().get_Region(),
                                    g = b - 16;
                                g < b + 16;
                                g++
                            )
                                for (var l = f - 16; l < f + 16; l++) {
                                    var h = d.GetObjectFromPosition(
                                        g * d.get_GridWidth(),
                                        l * d.get_GridHeight()
                                    );
                                    null != h &&
                                        'function' === typeof h.get_BaseLevel &&
                                        (h.get_VisObjectType() ==
                                            ClientLib.Vis.VisObject.EObjectType.RegionNPCCamp &&
                                            (2 === h.get_CampType() &&
                                                'c' == c &&
                                                Math.floor(h.get_BaseLevel()) <
                                                    parseInt(this.cLevel.getValue(), 10) &&
                                                h.HideInfos(),
                                            3 === h.get_CampType() &&
                                                'o' == c &&
                                                Math.floor(h.get_BaseLevel()) <
                                                    parseInt(this.oLevel.getValue(), 10) &&
                                                h.HideInfos(),
                                            0 === h.get_CampType() && h.HideInfos()),
                                        h.get_VisObjectType() ==
                                            ClientLib.Vis.VisObject.EObjectType.RegionCityType &&
                                            'p' == c &&
                                            Math.floor(h.get_BaseLevel()) <
                                                parseInt(this.pLevel.getValue(), 10) &&
                                            (h.IsOwnBase() || h.HideInfos()),
                                        h.get_VisObjectType() ==
                                            ClientLib.Vis.VisObject.EObjectType.RegionNPCBase &&
                                            'b' == c &&
                                            Math.floor(h.get_BaseLevel()) <
                                                parseInt(this.bLevel.getValue(), 10) &&
                                            h.HideInfos(),
                                        'a' == c &&
                                            Math.floor(h.get_BaseLevel()) <
                                                parseInt(this.aLevel.getValue(), 10) &&
                                            ('function' === typeof h.IsOwnBase
                                                ? h.IsOwnBase() || h.HideInfos()
                                                : h.HideInfos()));
                                }
                        },
                        reset: function(c) {
                            console.log('reset view');
                            this.showAll();
                        },
                        showAll: function() {
                            try {
                                ClientLib.Vis.VisMain.GetInstance()
                                    .get_Region()
                                    .ShowAllPlates();
                            } catch (c) {
                                console.log(c);
                            }
                        },
                    },
                });
                qx.Class.define('CncEcoHIDE.window.Window', {
                    type: 'singleton',
                    extend: qx.ui.window.Window,
                    construct: function() {
                        try {
                            this.base(arguments),
                                this.set({
                                    layout: new qx.ui.layout.VBox().set({ spacing: 0 }),
                                    contentPadding: 5,
                                    contentPaddingTop: 0,
                                    allowMaximize: !1,
                                    showMaximize: !1,
                                    allowMinimize: !1,
                                    showMinimize: !1,
                                    resizable: !1,
                                }),
                                this.setCaption('Hide targets'),
                                this.moveTo(150, 50),
                                this.add(new CncEcoHIDE.window.container('o')),
                                this.add(new CncEcoHIDE.window.container('c')),
                                this.add(new CncEcoHIDE.window.container('b')),
                                this.add(new CncEcoHIDE.window.container('p')),
                                this.add(new CncEcoHIDE.window.container('a')),
                                this.add(new CncEcoHIDE.window.container('reset')),
                                this.addListener('appear', this.onOpen, this),
                                this.addListener('close', this.onClose, this);
                        } catch (c) {
                            console.log('Error setting up CncEcoHIDE.window.Window Constructor: '),
                                console.log(c.toString());
                        }
                    },
                    destruct: function() {},
                    members: {
                        view: {},
                        onOpen: function() {
                            console.log('Window onOpen ');
                        },
                        onClose: function() {
                            console.log('Window onClose ');
                        },
                        initialize: function() {
                            try {
                                CncEcomain.getInstance().AddMainMenu(
                                    'hide targets',
                                    function() {
                                        CncEcoHIDE.window.Window.getInstance().open();
                                    },
                                    'Alt+h'
                                ),
                                    phe.cnc.Util.attachNetEvent(
                                        ClientLib.Vis.VisMain.GetInstance(),
                                        'ViewModeChange',
                                        ClientLib.Vis.ViewModeChange,
                                        this,
                                        this.viewChangeHandler
                                    ),
                                    (this.btnHideCurrent = new qx.ui.form.Button('Hide')),
                                    this.btnHideCurrent.set({
                                        width: 50,
                                        appearance: 'button-text-small',
                                        toolTipText: 'Hide From Map',
                                    }),
                                    this.btnHideCurrent.addListener(
                                        'click',
                                        this.hideCurrent,
                                        this
                                    ),
                                    (this.btndelCurrent = new qx.ui.form.Button('del')),
                                    this.btndelCurrent.set({
                                        width: 50,
                                        appearance: 'button-text-small',
                                        toolTipText: 'Delete From Map',
                                    }),
                                    this.btndelCurrent.addListener('click', this.delCurrent, this);
                            } catch (c) {
                                h(c);
                            }
                        },
                        viewChangeHandler: function(c, f) {
                            try {
                                var b = qx.core.Init.getApplication().getUIItem(
                                        ClientLib.Data.Missions.PATH.OVL_PLAYAREA
                                    ),
                                    d = ClientLib.Data.MainData.GetInstance()
                                        .get_Cities()
                                        .get_CurrentCity();
                                null != d &&
                                    (((this.view.ownCity =
                                        d ===
                                        ClientLib.Data.MainData.GetInstance()
                                            .get_Cities()
                                            .get_CurrentOwnCity()),
                                    this.view.ownCity || f !== ClientLib.Vis.Mode.CombatSetup)
                                        ? c === ClientLib.Vis.Mode.CombatSetup &&
                                          (b.remove(this.btnHideCurrent),
                                          b.remove(this.btndelCurrent))
                                        : (b.add(this.btnHideCurrent, { right: 1, top: 33 }),
                                          b.add(this.btndelCurrent, { right: 1, top: 60 })));
                            } catch (g) {
                                console.log(g);
                            }
                        },
                        hideCurrent: function() {
                            try {
                                var c = ClientLib.Data.MainData.GetInstance()
                                        .get_Cities()
                                        .get_CurrentCity(),
                                    d = c.get_PosX(),
                                    b = c.get_PosY(),
                                    h = ClientLib.Vis.VisMain.GetInstance().get_Region();
                                h.GetObjectFromPosition(
                                    d * h.get_GridWidth(),
                                    b * h.get_GridHeight()
                                ).HideInfos();
                                qx.core.Init.getApplication()
                                    .getMainOverlay()
                                    ._onClose();
                            } catch (g) {
                                console.log(g);
                            }
                        },
                        delCurrent: function() {
                            console.log('___________del___________');
                            try {
                                var c = ClientLib.Data.MainData.GetInstance()
                                        .get_Cities()
                                        .get_CurrentCity(),
                                    d = c.get_PosX(),
                                    b = c.get_PosY(),
                                    h = ClientLib.Vis.VisMain.GetInstance().get_Region();
                                h.GetObjectFromPosition(
                                    d * h.get_GridWidth(),
                                    b * h.get_GridHeight()
                                ).Dispose();
                                qx.core.Init.getApplication()
                                    .getMainOverlay()
                                    ._onClose();
                            } catch (g) {
                                console.log(g);
                            }
                        },
                    },
                });
                l.xhr = {
                    _load: !1,
                    _xhr: null,
                    _timeout: 3e3,
                    start: function() {
                        var c = null;
                        if (window.XMLHttpRequest) c = new XMLHttpRequest();
                        else if (window.ActiveXObject)
                            try {
                                c = new ActiveXObject('Msxml2.XMLHTTP.6.0');
                            } catch (b) {
                                try {
                                    c = new ActiveXObject('Msxml2.XMLHTTP.3.0');
                                } catch (S) {
                                    var d = { func: 'start', class: 'CncEco.xhr' };
                                    d.error = S;
                                    h(S);
                                    beta && H(S, d);
                                }
                            }
                        if (null === c) return !1;
                        l.xhr._load = !0;
                        l.xhr._xhr = c;
                        l.xhr._xhr.timeout = l.xhr._timeout;
                        return l.xhr._load;
                    },
                    send: function(c, d, b, r, g) {
                        try {
                            if (null !== l.xhr._xhr)
                                if (!1 !== l.xhr._load && null !== l.xhr._xhr) {
                                    l.xhr._xhr.open(d, c, !0);
                                    if (null !== b && 'object' == typeof b)
                                        for (var f in b)
                                            b[f].hasOwnProperty('name') &&
                                                b[f].hasOwnProperty('value') &&
                                                l.xhr._xhr.setRequestHeader(b[f].name, b[f].value);
                                    l.xhr._xhr.onload = function() {
                                        try {
                                            if (4 == l.xhr._xhr.readyState)
                                                if (200 == l.xhr._xhr.status)
                                                    if ('function' == typeof g)
                                                        g(l.xhr._xhr.responseText);
                                                    else {
                                                        var b = {
                                                            func: 'send',
                                                            class: 'CncEco.xhr',
                                                        };
                                                        var c = 'typeof callback !== function';
                                                        b.error = c;
                                                        h(c);
                                                        beta && H(c, b);
                                                    }
                                                else
                                                    (b = { func: 'send', class: 'CncEco.xhr' }),
                                                        (c = 'CncEco.xhr._xhr.status !== 200'),
                                                        (b.error = c),
                                                        h(c),
                                                        beta && H(c, b);
                                        } catch (p) {
                                            (b = {
                                                func: 'send CncEco.xhr._xhr.onreadystatechange',
                                                class: 'CncEco.xhr',
                                            }),
                                                (b.error = p),
                                                h(p),
                                                beta && H(p, b);
                                        }
                                    };
                                    l.xhr._xhr.ontimeout = function() {
                                        var b = {
                                            func: 'CncEco.xhr._xhr.onerror',
                                            class: 'CncEco.xhr',
                                            error: 'ontimeout',
                                        };
                                        h('ontimeout');
                                        beta && H('ontimeout', b);
                                    };
                                    if (null !== r)
                                        if (
                                            ('stringify' == JSON.isjson(r) &&
                                                !0 === Array.isarray(r)) ||
                                            (!0 === Object.isobj(r) &&
                                                'stringify' == JSON.isjson(r))
                                        )
                                            l.xhr._xhr.send(JSON.stringify(r));
                                        else {
                                            var q = {
                                                func: 'send',
                                                class: 'CncEco.xhr',
                                                error:
                                                    "Array.isarray(data) && JSON.isjson(data) === 'stringify' || Object.isabj(data) JSON.isjson(data) === 'stringify'",
                                            };
                                            h(
                                                "Array.isarray(data) && JSON.isjson(data) === 'stringify' || Object.isabj(data) JSON.isjson(data) === 'stringify'"
                                            );
                                            beta &&
                                                H(
                                                    "Array.isarray(data) && JSON.isjson(data) === 'stringify' || Object.isabj(data) JSON.isjson(data) === 'stringify'",
                                                    q
                                                );
                                        }
                                    else l.xhr._xhr.send(null);
                                } else alert('Ihr Browser unterstuetzt kein Ajax!');
                        } catch (k) {
                            (q = {
                                func: 'send CncEco.xhr._xhr.onreadystatechange',
                                class: 'CncEco.xhr',
                            }),
                                (q.error = k),
                                h(k),
                                beta && H(k, q);
                        }
                    },
                };
                l.xhr = l.xhr;
                l.xhr.start = l.xhr.start;
                l.xhr.name = 'CncEco.xhr';
                window.CncEco = l;
                return !0;
            }
            function X(h) {
                var l = [],
                    d;
                for (d in h)
                    if ('object' == typeof h[d] && h[d])
                        for (var c in h[d])
                            if (376877 <= PerforceChangelist) {
                                if ('object' == typeof h[d][c] && h[d][c] && 'd' in h[d][c]) {
                                    var f = h[d][c].d;
                                    if ('object' == typeof f && f)
                                        for (var b in f)
                                            'object' == typeof f[b] &&
                                                f[b] &&
                                                'get_CurrentLevel' in f[b] &&
                                                l.push(f);
                                }
                            } else if (
                                'object' == typeof h[d][c] &&
                                h[d][c] &&
                                'l' in h[d][c] &&
                                ((f = h[d][c].l), 'object' == typeof f && f)
                            )
                                for (b in f)
                                    'object' == typeof f[b] &&
                                        f[b] &&
                                        'get_CurrentLevel' in f[b] &&
                                        l.push(f);
                return l;
            }
            function V(baseId, r, d) {
                h('CNCOpt Link loaded');
                var c = {
                    selected_base: null,
                    keymap: {
                        GDI_Accumulator: 'a',
                        GDI_Refinery: 'r',
                        'GDI_Trade Center': 'u',
                        GDI_Silo: 's',
                        'GDI_Power Plant': 'p',
                        'GDI_Construction Yard': 'y',
                        GDI_Airport: 'd',
                        GDI_Barracks: 'b',
                        GDI_Factory: 'f',
                        'GDI_Defense HQ': 'q',
                        'GDI_Defense Facility': 'w',
                        'GDI_Command Center': 'e',
                        GDI_Support_Art: 'z',
                        GDI_Support_Air: 'x',
                        GDI_Support_Ion: 'i',
                        FOR_Silo: 's',
                        FOR_Refinery: 'r',
                        'FOR_Tiberium Booster': 'b',
                        'FOR_Crystal Booster': 'v',
                        'FOR_Trade Center': 'u',
                        'FOR_Defense Facility': 'w',
                        'FOR_Construction Yard': 'y',
                        FOR_Harvester_Tiberium: 'h',
                        'FOR_Defense HQ': 'q',
                        FOR_Harvester_Crystal: 'n',
                        NOD_Refinery: 'r',
                        'NOD_Power Plant': 'p',
                        NOD_Harvester: 'h',
                        'NOD_Construction Yard': 'y',
                        NOD_Airport: 'd',
                        'NOD_Trade Center': 'u',
                        'NOD_Defense HQ': 'q',
                        NOD_Barracks: 'b',
                        NOD_Silo: 's',
                        NOD_Factory: 'f',
                        NOD_Harvester_Crystal: 'n',
                        'NOD_Command Post': 'e',
                        NOD_Support_Art: 'z',
                        NOD_Support_Ion: 'i',
                        NOD_Accumulator: 'a',
                        NOD_Support_Air: 'x',
                        'NOD_Defense Facility': 'w',
                        GDI_Wall: 'w',
                        GDI_Cannon: 'c',
                        'GDI_Antitank Barrier': 't',
                        GDI_Barbwire: 'b',
                        GDI_Turret: 'm',
                        GDI_Flak: 'f',
                        'GDI_Art Inf': 'r',
                        'GDI_Art Air': 'e',
                        'GDI_Art Tank': 'a',
                        'GDI_Def_APC Guardian': 'g',
                        'GDI_Def_Missile Squad': 'q',
                        GDI_Def_Pitbull: 'p',
                        GDI_Def_Predator: 'd',
                        GDI_Def_Sniper: 's',
                        'GDI_Def_Zone Trooper': 'z',
                        'NOD_Def_Antitank Barrier': 't',
                        'NOD_Def_Art Air': 'e',
                        'NOD_Def_Art Inf': 'r',
                        'NOD_Def_Art Tank': 'a',
                        'NOD_Def_Attack Bike': 'p',
                        NOD_Def_Barbwire: 'b',
                        'NOD_Def_Black Hand': 'z',
                        NOD_Def_Cannon: 'c',
                        NOD_Def_Confessor: 's',
                        NOD_Def_Flak: 'f',
                        'NOD_Def_MG Nest': 'm',
                        'NOD_Def_Militant Rocket Soldiers': 'q',
                        NOD_Def_Reckoner: 'g',
                        'NOD_Def_Scorpion Tank': 'd',
                        NOD_Def_Wall: 'w',
                        FOR_Wall: 'w',
                        FOR_Barbwire_VS_Inf: 'b',
                        FOR_Barrier_VS_Veh: 't',
                        FOR_Inf_VS_Inf: 'g',
                        FOR_Inf_VS_Veh: 'r',
                        FOR_Inf_VS_Air: 'q',
                        FOR_Sniper: 'n',
                        FOR_Mammoth: 'y',
                        FOR_Veh_VS_Inf: 'o',
                        FOR_Veh_VS_Veh: 's',
                        FOR_Veh_VS_Air: 'u',
                        FOR_Turret_VS_Inf: 'm',
                        FOR_Turret_VS_Inf_ranged: 'a',
                        FOR_Turret_VS_Veh: 'v',
                        FOR_Turret_VS_Veh_ranged: 'd',
                        FOR_Turret_VS_Air: 'f',
                        FOR_Turret_VS_Air_ranged: 'e',
                        'GDI_APC Guardian': 'g',
                        GDI_Commando: 'c',
                        GDI_Firehawk: 'f',
                        GDI_Juggernaut: 'j',
                        GDI_Kodiak: 'k',
                        GDI_Mammoth: 'm',
                        'GDI_Missile Squad': 'q',
                        GDI_Orca: 'o',
                        GDI_Paladin: 'a',
                        GDI_Pitbull: 'p',
                        GDI_Predator: 'd',
                        GDI_Riflemen: 'r',
                        'GDI_Sniper Team': 's',
                        'GDI_Zone Trooper': 'z',
                        'NOD_Attack Bike': 'b',
                        NOD_Avatar: 'a',
                        'NOD_Black Hand': 'z',
                        NOD_Cobra: 'r',
                        NOD_Commando: 'c',
                        NOD_Confessor: 's',
                        'NOD_Militant Rocket Soldiers': 'q',
                        NOD_Militants: 'm',
                        NOD_Reckoner: 'k',
                        NOD_Salamander: 'l',
                        'NOD_Scorpion Tank': 'o',
                        'NOD_Specter Artilery': 'p',
                        NOD_Venom: 'v',
                        NOD_Vertigo: 't',
                        '<last>': '.',
                    },
                    make_sharelink: function() {
                        try {
                            var f = c.selected_base,
                                b = ClientLib.Data.MainData.GetInstance()
                                    .get_Cities()
                                    .GetCity(f),
                                l = ClientLib.Data.MainData.GetInstance()
                                    .get_Cities()
                                    .get_CurrentOwnCity(),
                                g = ClientLib.Data.MainData.GetInstance().get_Alliance(),
                                n = ClientLib.Data.MainData.GetInstance().get_Server();
                            tbase = f;
                            tcity = b;
                            scity = l;
                            f = 'http://cncopt.com/?map=';
                            f += '3|';
                            switch (b.get_CityFaction()) {
                                case 1:
                                    f += 'G|';
                                    break;
                                case 2:
                                    f += 'N|';
                                    break;
                                case 3:
                                case 4:
                                case 5:
                                case 6:
                                    f += 'F|';
                                    break;
                                default:
                                    h('cncopt: Unknown faction: ' + b.get_CityFaction()),
                                        (f += 'E|');
                            }
                            switch (l.get_CityFaction()) {
                                case 1:
                                    f += 'G|';
                                    break;
                                case 2:
                                    f += 'N|';
                                    break;
                                case 3:
                                case 4:
                                case 5:
                                case 6:
                                    f += 'F|';
                                    break;
                                default:
                                    h('cncopt: Unknown faction: ' + l.get_CityFaction()),
                                        (f += 'E|');
                            }
                            f += b.get_Name() + '|';
                            defense_units = [];
                            for (l = 0; 20 > l; ++l) {
                                var q = [];
                                for (var k = 0; 9 > k; ++k) q.push(null);
                                defense_units.push(q);
                            }
                            a: {
                                for (var u = X(b), p = 0; p < u.length; ++p)
                                    for (var x in u[p])
                                        if (u[p][x].get_UnitGameData_Obj().n in aa) {
                                            var B = u[p];
                                            break a;
                                        }
                                B = [];
                            }
                            if (376877 <= PerforceChangelist)
                                for (l in B) {
                                    var m = B[l];
                                    defense_units[m.get_CoordX()][m.get_CoordY() + 8] = m;
                                }
                            else
                                for (l = 0; l < B.length; ++l)
                                    (m = B[l]),
                                        (defense_units[m.get_CoordX()][m.get_CoordY() + 8] = m);
                            offense_units = [];
                            for (l = 0; 20 > l; ++l) {
                                q = [];
                                for (k = 0; 9 > k; ++k) q.push(null);
                                offense_units.push(q);
                            }
                            a: {
                                var A = X(b);
                                for (q = 0; q < A.length; ++q)
                                    for (var D in A[q])
                                        if (A[q][D].get_UnitGameData_Obj().n in ba) {
                                            var w = A[q];
                                            break a;
                                        }
                                w = [];
                            }
                            if (376877 <= PerforceChangelist)
                                for (l in w)
                                    (m = w[l]),
                                        (offense_units[m.get_CoordX()][m.get_CoordY() + 16] = m);
                            else
                                for (l = 0; l < w.length; ++l)
                                    (m = w[l]),
                                        (offense_units[m.get_CoordX()][m.get_CoordY() + 16] = m);
                            a: {
                                for (var t in b)
                                    if (
                                        'object' == typeof b[t] &&
                                        b[t] &&
                                        0 in b[t] &&
                                        8 in b[t] &&
                                        'object' == typeof b[t][0] &&
                                        b[t][0] &&
                                        b[t][0] &&
                                        0 in b[t][0] &&
                                        15 in b[t][0] &&
                                        'object' == typeof b[t][0][0] &&
                                        b[t][0][0] &&
                                        'BuildingIndex' in b[t][0][0]
                                    ) {
                                        var C = b[t];
                                        break a;
                                    }
                                C = null;
                            }
                            a: {
                                var v = b.get_CityBuildingsData(),
                                    z;
                                for (z in v)
                                    if (376877 <= PerforceChangelist) {
                                        if (
                                            'object' === typeof v[z] &&
                                            v[z] &&
                                            'd' in v[z] &&
                                            'c' in v[z] &&
                                            0 < v[z].c
                                        ) {
                                            var y = v[z].d;
                                            break a;
                                        }
                                    } else if ('object' === typeof v[z] && v[z] && 'l' in v[z]) {
                                        y = v[z].l;
                                        break a;
                                    }
                                y = void 0;
                            }
                            for (l = 0; 20 > l; ++l)
                                for (row = [], k = 0; 9 > k; ++k) {
                                    var E = 16 < l ? null : C[k][l];
                                    m = 0;
                                    w = null;
                                    E &&
                                        0 <= E.BuildingIndex &&
                                        ((w = y[E.BuildingIndex]), (m = w.get_CurrentLevel()));
                                    var F = defense_units[k][l];
                                    F && (m = F.get_CurrentLevel());
                                    var G = offense_units[k][l];
                                    G && (m = G.get_CurrentLevel());
                                    1 < m && (f += m);
                                    switch (16 < l ? 0 : b.GetResourceType(k, l)) {
                                        case 0:
                                            if (w) {
                                                var H = w.get_MdbBuildingId();
                                                GAMEDATA.Tech[H].n in c.keymap
                                                    ? (f += c.keymap[GAMEDATA.Tech[H].n])
                                                    : (h('cncopt [5]: Unhandled building: ' + H, w),
                                                      (f += '.'));
                                            } else
                                                F
                                                    ? F.get_UnitGameData_Obj().n in c.keymap
                                                        ? (f +=
                                                              c.keymap[F.get_UnitGameData_Obj().n])
                                                        : (h(
                                                              'cncopt [5]: Unhandled unit: ' +
                                                                  F.get_UnitGameData_Obj().n
                                                          ),
                                                          (f += '.'))
                                                    : G
                                                    ? G.get_UnitGameData_Obj().n in c.keymap
                                                        ? (f +=
                                                              c.keymap[G.get_UnitGameData_Obj().n])
                                                        : (h(
                                                              'cncopt [5]: Unhandled unit: ' +
                                                                  G.get_UnitGameData_Obj().n
                                                          ),
                                                          (f += '.'))
                                                    : (f += '.');
                                            break;
                                        case 1:
                                            f = 0 > E.BuildingIndex ? f + 'c' : f + 'n';
                                            break;
                                        case 2:
                                            f = 0 > E.BuildingIndex ? f + 't' : f + 'h';
                                            break;
                                        case 4:
                                            f += 'j';
                                            break;
                                        case 5:
                                            f += 'h';
                                            break;
                                        case 6:
                                            f += 'l';
                                            break;
                                        case 7:
                                            f += 'k';
                                            break;
                                        default:
                                            h(
                                                'cncopt [4]: Unhandled resource type: ' +
                                                    b.GetResourceType(k, l)
                                            ),
                                                (f += '.');
                                    }
                                }
                            g &&
                                scity.get_AllianceId() == tcity.get_AllianceId() &&
                                ((f += '|' + g.get_POITiberiumBonus()),
                                (f += '|' + g.get_POICrystalBonus()),
                                (f += '|' + g.get_POIPowerBonus()),
                                (f += '|' + g.get_POIInfantryBonus()),
                                (f += '|' + g.get_POIVehicleBonus()),
                                (f += '|' + g.get_POIAirBonus()),
                                (f += '|' + g.get_POIDefenseBonus()));
                            1.2 !== n.get_TechLevelUpgradeFactorBonusAmount() &&
                                (f += '|newEconomy');
                            d.setFormField('opt' + r, f);
                            return f;
                        } catch (N) {
                            h('cncopt [1]: ', N);
                        }
                    },
                };
                c.selected_base = baseId;
                c.make_sharelink();
            }
            function Z(h, r) {
                CncEcomain.getInstance().remoteRequest('update', r);
            }
            function H(h, r) {
                var d = {};
                d.func = r.func;
                d['class'] = r['class'];
                d.message = h.message;
                d.error = h.stack;
                MainData = ClientLib.Data.MainData.GetInstance();
                B = MainData.get_Player();
                d.playerName = B.get_Name();
                d.accountId = B.get_AccountId();
                server = MainData.get_Server();
                d.worldId = server.get_WorldId();
                d.clientinfo = ca();
                var c = null;
                console.log(
                    '____________________________Mest5-errorreport->send______________________________________'
                );
                console.log(d);
                console.log(
                    '_________________________________________________________________________________________'
                );
                if (window.XMLHttpRequest) c = new XMLHttpRequest();
                else if (window.ActiveXObject)
                    try {
                        c = new ActiveXObject('Msxml2.XMLHTTP.6.0');
                    } catch (f) {
                        try {
                            c = new ActiveXObject('Msxml2.XMLHTTP.3.0');
                        } catch (b) {
                            console.log(b);
                        }
                    }
                null !== c &&
                    c.open('POST', 'https://www.member-stats.de/playerinfo.php?i=error', !0);
                c.onreadystatechange = function() {
                    4 == this.readyState &&
                        (200 == this.status ? console.log(h) : console.log(this.statusText));
                };
                c.send(JSON.stringify(d));
            }
            function ca() {
                var h,
                    r = navigator.userAgent.toLowerCase(),
                    d = function(b) {
                        return b.test(r);
                    },
                    c = d(/opera/),
                    f = d(/chrome/),
                    b = d(/webkit/),
                    x = !f && d(/safari/);
                x && d(/applewebkit\/4/);
                x && d(/version\/3/);
                x && d(/version\/4/);
                var g = !c && d(/msie/),
                    n = g && d(/msie 7/),
                    q = g && d(/msie 8/),
                    k = g && !n && !q,
                    u = !b && d(/gecko/);
                var p = u && d(/rv:1\.8/);
                var B = u && d(/rv:1\.9/),
                    E = d(/windows|win32/),
                    m = d(/macintosh|mac os x/);
                d(/adobeair/);
                var A = d(/linux/);
                /^https/i.test(window.location.protocol);
                var D = '',
                    w = (h = d = ''),
                    r = navigator.userAgent.toLowerCase(),
                    d = function(b) {
                        return b.test(r);
                    };
                E
                    ? ((w = 'Windows'),
                      d(/windows nt/) &&
                          ((w = r.indexOf('windows nt')),
                          (E = r.indexOf(';', w)),
                          (w = r.substring(w, E))))
                    : (w = m ? 'Mac' : A ? 'Linux' : 'Other');
                g
                    ? ((D = d = 'IE'),
                      (p = r.indexOf('msie') + 5),
                      (h = r.indexOf(';', p)),
                      (h = r.substring(p, h)),
                      (D = k ? 'IE6' : n ? 'IE7' : q ? 'IE8' : 'IE'))
                    : u
                    ? ((d = (n = d(/firefox/)) ? 'Firefox' : 'Others'),
                      (D = p ? 'Gecko2' : B ? 'Gecko3' : 'Gecko'),
                      n &&
                          ((p = r.indexOf('firefox') + 8),
                          (h = r.indexOf(' ', p)),
                          -1 == h && (h = r.length),
                          (h = r.substring(p, h))))
                    : f
                    ? ((d = 'Chrome'),
                      (D = b ? 'Web Kit' : 'Other'),
                      (p = r.indexOf('chrome') + 7),
                      (h = r.indexOf(' ', p)),
                      (h = r.substring(p, h)))
                    : (d = c ? 'Opera' : x ? 'Safari' : '');
                n = {};
                n.javascript = D;
                n.browserType = d;
                n.browserVersion = h;
                n.osName = w;
                return n;
            }
            function Q() {
                try {
                    if ('undefined' !== typeof qx) {
                        var l = qx.core.Init.getApplication(),
                            r = qx.core.Init.getApplication().getMenuBar();
                        l && r
                            ? ((B = ClientLib.Data.MainData.GetInstance().get_Player()),
                              0 !== B.id
                                  ? (Y(),
                                    window.CncEcomain.getInstance().initialize(),
                                    window.CncEcoScanner.getInstance().initialize(),
                                    window.CncEcostorage.getInstance().initialize(),
                                    window.CncEcoReports.getInstance().initialize(),
                                    window.CncEcoxhr.getInstance().initialize(),
                                    CncEcoHIDE.window.Window.getInstance().initialize(),
                                    window.CncEco.xhr.start())
                                  : window.setTimeout(Q, 1e3))
                            : window.setTimeout(Q, 1e3);
                    } else window.setTimeout(Q, 1e3);
                } catch (d) {
                    h(d), window.setTimeout(Q, 1e3);
                }
            }
            function h(h) {
                h = '[CncEco] ' + h;
                'undefined' !== typeof console
                    ? console.log(h)
                    : window.opera && opera.postError(h);
            }
            var B = 0,
                T = 0,
                M = null,
                x = null,
                W = null,
                I = null,
                E = null,
                R = 0,
                U = 0,
                aa = {
                    GDI_Wall: 'w',
                    GDI_Cannon: 'c',
                    'GDI_Antitank Barrier': 't',
                    GDI_Barbwire: 'b',
                    GDI_Turret: 'm',
                    GDI_Flak: 'f',
                    'GDI_Art Inf': 'r',
                    'GDI_Art Air': 'e',
                    'GDI_Art Tank': 'a',
                    'GDI_Def_APC Guardian': 'g',
                    'GDI_Def_Missile Squad': 'q',
                    GDI_Def_Pitbull: 'p',
                    GDI_Def_Predator: 'd',
                    GDI_Def_Sniper: 's',
                    'GDI_Def_Zone Trooper': 'z',
                    'NOD_Def_Antitank Barrier': 't',
                    'NOD_Def_Art Air': 'e',
                    'NOD_Def_Art Inf': 'r',
                    'NOD_Def_Art Tank': 'a',
                    'NOD_Def_Attack Bike': 'p',
                    NOD_Def_Barbwire: 'b',
                    'NOD_Def_Black Hand': 'z',
                    NOD_Def_Cannon: 'c',
                    NOD_Def_Confessor: 's',
                    NOD_Def_Flak: 'f',
                    'NOD_Def_MG Nest': 'm',
                    'NOD_Def_Militant Rocket Soldiers': 'q',
                    NOD_Def_Reckoner: 'g',
                    'NOD_Def_Scorpion Tank': 'd',
                    NOD_Def_Wall: 'w',
                    FOR_Wall: 'w',
                    FOR_Barbwire_VS_Inf: 'b',
                    FOR_Barrier_VS_Veh: 't',
                    FOR_Inf_VS_Inf: 'g',
                    FOR_Inf_VS_Veh: 'r',
                    FOR_Inf_VS_Air: 'q',
                    FOR_Sniper: 'n',
                    FOR_Mammoth: 'y',
                    FOR_Veh_VS_Inf: 'o',
                    FOR_Veh_VS_Veh: 's',
                    FOR_Veh_VS_Air: 'u',
                    FOR_Turret_VS_Inf: 'm',
                    FOR_Turret_VS_Inf_ranged: 'a',
                    FOR_Turret_VS_Veh: 'v',
                    FOR_Turret_VS_Veh_ranged: 'd',
                    FOR_Turret_VS_Air: 'f',
                    FOR_Turret_VS_Air_ranged: 'e',
                    '': '',
                },
                ba = {
                    'GDI_APC Guardian': 'g',
                    GDI_Commando: 'c',
                    GDI_Firehawk: 'f',
                    GDI_Juggernaut: 'j',
                    GDI_Kodiak: 'k',
                    GDI_Mammoth: 'm',
                    'GDI_Missile Squad': 'q',
                    GDI_Orca: 'o',
                    GDI_Paladin: 'a',
                    GDI_Pitbull: 'p',
                    GDI_Predator: 'd',
                    GDI_Riflemen: 'r',
                    'GDI_Sniper Team': 's',
                    'GDI_Zone Trooper': 'z',
                    'NOD_Attack Bike': 'b',
                    NOD_Avatar: 'a',
                    'NOD_Black Hand': 'z',
                    NOD_Cobra: 'r',
                    NOD_Commando: 'c',
                    NOD_Confessor: 's',
                    'NOD_Militant Rocket Soldiers': 'q',
                    NOD_Militants: 'm',
                    NOD_Reckoner: 'k',
                    NOD_Salamander: 'l',
                    'NOD_Scorpion Tank': 'o',
                    'NOD_Specter Artilery': 'p',
                    NOD_Venom: 'v',
                    NOD_Vertigo: 't',
                    '': '',
                };
            /commandandconquer\.com/i.test(document.domain) && window.setTimeout(Q, 1e3);
        },
        CncEcoScript = document.createElement('script'),
        txt = CncEco_mainFunction.toString();
    CncEcoScript.innerHTML = '(' + txt + ')();';
    CncEcoScript.type = 'text/javascript';
    /commandandconquer\.com/i.test(document.domain) &&
        document.getElementsByTagName('head')[0].appendChild(CncEcoScript);
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址