{"version":3,"file":"c8ocaf.mjs","sources":["../../../projects/c8ocaf/src/lib/convertigo.utils.ts","../../../projects/c8ocaf/src/lib/convertigo.router.ts","../../../projects/c8ocaf/src/lib/convertigo.base.ts","../../../projects/c8ocaf/src/lib/convertigo.page.ts","../../../projects/c8ocaf/src/public-api.ts","../../../projects/c8ocaf/src/c8ocaf.ts"],"sourcesContent":["import { get, has } from 'lodash-es';\r\n\r\nexport class C8oCafUtils{\r\n\r\n  /**\r\n   *\r\n   * Creates a new Date Object, useful when called from a template as new operator is not allowed\r\n   *\r\n   * @param year\r\n   * @param month\r\n   * @param day\r\n   * @param hours\r\n   * @param minutes\r\n   * @param seconds\r\n   * @param milliseconds\r\n   * @returns {Date}\r\n   * @constructor\r\n   */\r\n  public static Date(year :any, month:any, day:any, hours:any, minutes:any, seconds:any, milliseconds:any): Date {\r\n    if (year && month && day && hours && minutes && seconds && milliseconds)\r\n    // all arguments are there , so use the Complete Date() constructor with 7 arguments\r\n      return new Date(year, month, day, hours, minutes, seconds, milliseconds)\r\n    if (year)\r\n    // Only one , so it can be Date(millisecs) or Date(DateString)\r\n      return new Date(year)\r\n    // No Arguments, so use Date()\r\n    return new Date()\r\n  }\r\n\r\n\r\n  /**\r\n   * Merge two objects\r\n   * @param {Object} firstObj\r\n   * @param secondObj\r\n   * @returns {Object}\r\n   */\r\n  public static merge(firstObj: Object, secondObj: any): Object{\r\n    return Object.assign(firstObj, secondObj);\r\n  }\r\n\r\n\r\n  /**\r\n   * Concat two words\r\n   * @param {string} word\r\n   * @returns {any}\r\n   */\r\n  public static wordPlusOne(word: string): any {\r\n    if (word != undefined) {\r\n      let word1 = word.slice(0, -1)\r\n      let word2 = C8oCafUtils.getNextLetter(word)\r\n      return word1 + word2;\r\n    }\r\n    else {\r\n      return {};\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Javascript method charCodeAt 0\r\n   * @param {String} char: the char to be changed\r\n   * @returns {String}\r\n   */\r\n  public static getNextLetter(char: String): String {\r\n    let code: number = char.charCodeAt(0);\r\n    code ++;\r\n    return String.fromCharCode(code);\r\n  }\r\n\r\n    /**\r\n     * Helps to safe eval the value of an path into an object or an array\r\n     * @param object: the object to eval\r\n     * @param path: the path to search\r\n     * @returns {any}: the value fetched or undefined\r\n     */\r\n    public static resolveArray(object: any, path: string = null): any{\r\n        try{\r\n            if(has(object, path)){\r\n                return get(object, path);\r\n            }else{\r\n                return undefined;\r\n            }\r\n        }\r\n        catch(err){\r\n            return undefined;\r\n        }\r\n    }\r\n\r\n}\r\n\r\nexport class Semaphore {\r\n  private max: number;\r\n  private counter = 0;\r\n  private waiting: any = [];\r\n\r\n  constructor(max: number){\r\n      this.max = max;\r\n  }\r\n  \r\n  \r\n  public take () {\r\n    if (this.waiting.length > 0 && this.counter < this.max){\r\n      this.counter++;\r\n      let promise: any = this.waiting.shift();\r\n      if(promise != undefined){\r\n        promise.resolve();\r\n      }\r\n    }\r\n  }\r\n  \r\n  public acquire () {\r\n    if(this.counter < this.max) {\r\n      this.counter++\r\n      return new Promise<void>(resolve => {\r\n      resolve();\r\n    });\r\n    } else {\r\n      return new Promise((resolve, err) => {\r\n        this.waiting.push({resolve: resolve, err: err});\r\n      });\r\n    }\r\n  }\r\n    \r\n  public release (arg = null) {\r\n   this.counter--;\r\n   this.take();\r\n  }\r\n  \r\n  public purge () {\r\n    let unresolved = this.waiting.length;\r\n  \r\n    for (let i = 0; i < unresolved; i++) {\r\n      this.waiting[i].err('Task has been purged.');\r\n    }\r\n  \r\n    this.counter = 0;\r\n    this.waiting = [];\r\n    \r\n    return unresolved;\r\n  }\r\n}\r\n","import { NavController } from '@ionic/angular';\r\nimport { Injectable } from '@angular/core';\r\n\r\nimport { C8o, C8oLogLevel, C8oException, C8oLocalCache, Priority } from \"c8osdkangular\";\r\nimport { DomSanitizer } from \"@angular/platform-browser\";\r\nimport { C8oPageBase } from \"./convertigo.base\";\r\nimport { ActivatedRoute } from '@angular/router';\r\n\r\n//import { NativePageTransitions, NativeTransitionOptions } from '@ionic-native/native-page-transitions';\r\n\r\n\r\n\r\n/*\r\n * The C8oRouter class is responsible to route Convertigo responses to the according View. This ensures that navigation is done\r\n * Automatically from Convertigo server responses and avoids the programmer to handle the navigation by itself\r\n *\r\n */\r\n@Injectable()\r\nexport class C8oRouter {\r\n    /**\r\n     * An array holding for a view index the data attached to this view.\r\n     */\r\n    private c8oResponses: Array<any>;\r\n    private _routerLogLevel: C8oLogLevel;\r\n    private static C8OCAF_SESSION_STORAGE_DATA = \"_c8ocafsession_storage_data\";\r\n    private static C8OCAF_SESSION_STORAGE_MODE = \"_c8ocafsession_storage_mode\";\r\n    private static C8OCAF_SESSION_STORAGE_CLEAR = \"_c8ocafsession_storage_clear\";\r\n    private storage: any;\r\n    public pagesArray = [];\r\n    public pagesKeyValue = {};\r\n    public sharedObject: any = {};\r\n    public loadingFamily: \"crescent\" | \"bubbles\" | \"circles\" | \"circular\" | \"dots\" | \"lines\" | \"lines-small\" | \"lines-sharp\" | \"lines-sharp-small\" | null | undefined = \"crescent\";\r\n\r\n\r\n    constructor(private _c8o: C8o, private route: ActivatedRoute, public sanitizer: DomSanitizer, public navController: NavController/* private nativePageTransitions: NativePageTransitions = null*/) {\r\n        this.c8oResponses = new Array<Object>();\r\n        //detect if we are in mobile builder mode and get the mode of storage to use\r\n        this._routerLogLevel = C8oLogLevel.DEBUG;\r\n        switch (sessionStorage.getItem(C8oRouter.C8OCAF_SESSION_STORAGE_MODE)) {\r\n            case \"local\":\r\n                this.storage = localStorage;\r\n                break;\r\n            case \"session\":\r\n                this.storage = sessionStorage;\r\n                break;\r\n            default:\r\n                this.storage = null;\r\n        }\r\n\r\n        // if we are in mobile builder mode\r\n        if (this.storage !== null) {\r\n            if (sessionStorage.getItem(C8oRouter.C8OCAF_SESSION_STORAGE_CLEAR) === \"true\") {// clear flag\r\n                this.storage.removeItem(C8oRouter.C8OCAF_SESSION_STORAGE_DATA);\r\n                sessionStorage.removeItem(C8oRouter.C8OCAF_SESSION_STORAGE_CLEAR);\r\n            }\r\n            this.c8oResponses = JSON.parse(this.storage.getItem(C8oRouter.C8OCAF_SESSION_STORAGE_DATA));\r\n        }\r\n        // if c8oResponses is null then instanciate an empty array\r\n        if (this.c8oResponses === null) {\r\n            this.c8oResponses = new Array();\r\n        }\r\n    }\r\n\r\n    get routerLogLevel(): C8oLogLevel {\r\n        return this._routerLogLevel;\r\n    }\r\n\r\n    set routerLogLevel(value: C8oLogLevel) {\r\n        this._routerLogLevel = value;\r\n    }\r\n\r\n    public log(message: string) {\r\n        let lvl: any = \"_\" + this._routerLogLevel.name;\r\n\r\n        if (lvl != \"_none\") {\r\n            let msg = \"[caf] \" + message;\r\n            this.c8o.log[lvl](msg)\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {C8o}\r\n     */\r\n    public get c8o(): C8o {\r\n        return this._c8o\r\n    }\r\n\r\n    /**\r\n     * Execute routing:\r\n     *\r\n     * Routing works by analysing a Convertigo response. Each route is explored. for a given requestable and if the\r\n     * condition for the route matches, then the destination page is pushed or \"rooted\" in the navConsroller\r\n     *\r\n     * @param reponse       the Convertigo server response\r\n     * @param parameters    the requestable in discrete \"__sequence\", \"__project\" property form\r\n     * @param exception     optional exception if it is a failed requestable call\r\n     *\r\n     */\r\n    execute_route(response: any, parameters: any, pageName: string = \"\", instanceID: string): Promise<any> {\r\n        return new Promise((resolve) => {\r\n            let requestable: string = (parameters[\"__project\"] == undefined ? \"\" : parameters[\"__project\"]) + \".\" + parameters[\"__sequence\"];\r\n            let activeView: any = pageName;\r\n            \r\n            let navParams: any = (parameters[\"_navParams\"] == {}) ? \"\" : parameters[\"_navParams\"]\r\n            this.storeResponseForView(activeView, requestable, response, navParams, null, null, instanceID);\r\n            resolve(null);\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Calls a Convertigo requestable. When the response comes back we execute the routes to switch to the target page\r\n     *\r\n     * @param requestable as a \"project.sequence\" of as \"fs://database.verb\"\r\n     * @param data for the call\r\n     *\r\n     */\r\n    c8oCall(requestable: string, parameters?: any, navParams?: any, page?: C8oPageBase): Promise<any> {\r\n        return new Promise((resolve, reject) => {\r\n            if (parameters != undefined && parameters[\"__localCache_priority\"] != undefined && (parameters[\"__localCache_priority\"] == \"priority_server\" || parameters[\"__localCache_priority\"] == \"priority_local\")) {\r\n                let localCache_priority;\r\n                if (parameters[\"__localCache_priority\"] == \"priority_server\") {\r\n                    localCache_priority = Priority.SERVER;\r\n                }\r\n                else {\r\n                    localCache_priority = Priority.LOCAL;\r\n                }\r\n                parameters[C8oLocalCache.PARAM] = new C8oLocalCache(localCache_priority, parameters[\"__localCache_ttl\"]);\r\n                delete parameters[\"__localCache_priority\"];\r\n                delete parameters[\"__localCache_ttl\"];\r\n            }\r\n            this.c8o.callJsonObject(requestable, parameters)\r\n                .then((response: any, parameters: Object) => {\r\n                    parameters['_navParams'] = navParams;\r\n                    const pageName = page.constructor[\"nameStatic\"] != undefined ? page.constructor[\"nameStatic\"] : \"AppComponent\";\r\n                    this.execute_route(response, parameters, pageName, page.instanceID)\r\n                        .then(() => {\r\n                            // check for live tag in order to order to page to reload new results ..\r\n                            page.tick()\r\n                            resolve(response);\r\n                        });\r\n                    return null;\r\n                })\r\n                .fail((exception: C8oException, parametersF: Object) => {\r\n                    this.c8o.log.error(\"Error occured when calling \" + requestable + \":\" + exception.stack);\r\n                    reject(exception);\r\n                });\r\n        });\r\n\r\n    }\r\n\r\n\r\n    /**\r\n     * When a page is navigated to, it will get the response data passed in the Push() or setRoot() and will call this\r\n     * method to store this data indexed by this page instance. This way each page can retrieve data from its instance index\r\n     * to use Angular binding to its HTML.\r\n     *\r\n     *   @view          the view index where the data will be stored\r\n     *   @requestable   the requestable from where this data was responded\r\n     *   @data          the data\r\n     */\r\n    public storeResponseForView(view: any, requestable: string, data: any, navParams: any, didEnter: any, didLeave: any, instanceID: any) {\r\n        let pushFlag = true;\r\n        for (var i = 0; i < this.c8oResponses.length; i++) {\r\n            // removed view parameters to support ngx shared components\r\n            if(this.c8oResponses[i][\"view\"] == view && this.c8oResponses[i][\"requestable\"] == requestable && this.c8oResponses[i][\"instanceID\"] == instanceID){\r\n            //if (this.c8oResponses[i][\"requestable\"] == requestable) {\r\n                this.c8oResponses[i][\"data\"] = data;\r\n                this.c8oResponses[i][\"navParams\"] = navParams;\r\n                this.c8oResponses[i][\"DidEnter\"] = didEnter;\r\n                this.c8oResponses[i][\"DidLeave\"] = didLeave;\r\n                pushFlag = false;\r\n                break;\r\n            }\r\n        }\r\n        if(pushFlag){\r\n            this.c8oResponses.push({\r\n                \"view\": view,\r\n                \"instanceID\": instanceID,\r\n                \"requestable\": requestable,\r\n                \"data\": data,\r\n                \"navParams\": navParams\r\n            });\r\n        }\r\n        \r\n        // if we are in mobile builder mode\r\n        if (this.storage !== null) {\r\n            //delete rootNavCtrl present in navParams to prevent from cyclic JSON issues\r\n            for (let val in this.c8oResponses) {\r\n                try {\r\n                    /*if (this.c8oResponses[val][\"navParams\"][\"data\"][\"rootNavCtrl\"] instanceof Nav) {\r\n\r\n                        delete this.c8oResponses[val][\"navParams\"][\"data\"][\"rootNavCtrl\"];\r\n                    }*/\r\n                }\r\n                catch (err) {\r\n\r\n                }\r\n\r\n            }\r\n            // storage for c8ocaf refresh keep state data\r\n            this.storage.setItem(C8oRouter.C8OCAF_SESSION_STORAGE_DATA, JSON.stringify(this.c8oResponses));\r\n        }\r\n    }\r\n\r\n    /**\r\n     * When a page(view) is displayed it will call this method to retreive the data that was stored for this view\r\n     *\r\n     * @param view: the view we must restore data from\r\n     * @param {string[]} requestables: an array of requestables from where the data was responded\r\n     * @returns {any}: data to fetch\r\n     */\r\n    public getResponseForView(view: any, requestables: string[], instanceID: string): any {\r\n        try {\r\n            if (requestables != undefined) {\r\n                for (let requestable of requestables) {\r\n                    for (let item of this.c8oResponses) {\r\n                        if (item[\"view\"] == view && item[\"requestable\"] == requestable && item[\"instanceID\"] == instanceID) {\r\n                            return (item[\"data\"]);\r\n                        }\r\n                    }\r\n                    for (let item of this.c8oResponses) {\r\n                        if (item[\"view\"] == view && item[\"requestable\"] == requestable) {\r\n                            return (item[\"data\"]);\r\n                        }\r\n                    }\r\n                    for (let item of this.c8oResponses) {\r\n                        if (item[\"requestable\"] == requestable) {\r\n                            return (item[\"data\"]);\r\n                        }\r\n                    }\r\n                }\r\n                return (new Object());\r\n            }\r\n        }\r\n        catch (error) {\r\n            console.log(error)\r\n        }\r\n    }\r\n\r\n    /**\r\n     * When a page(view) is displayed it will call this method to delete the data that was stored for this view\r\n     *\r\n     * @param view: the view we must restore data from\r\n     * @param {string[]} requestables: an array of requestables from where the data was responded\r\n     * @returns {boolean} true if a value has been deleted.\r\n     */\r\n    public deleteResponseForView(view: any, requestables: string[]): boolean {\r\n        try {\r\n            if (requestables != undefined) {\r\n                requestables.forEach((requestable) => {\r\n                    this.c8oResponses.forEach((item, index) => {\r\n                        if (item[\"view\"] == view && item[\"requestable\"] == requestable) {\r\n                            delete this.c8oResponses[index][\"data\"];\r\n                            return true;\r\n                        }\r\n                        if (item[\"requestable\"] == requestable) {\r\n                            delete this.c8oResponses[index][\"data\"];\r\n                            return true;\r\n                        }\r\n                    });\r\n                });\r\n                return false;\r\n            }\r\n        }\r\n        catch (error) {\r\n            console.log(error)\r\n        }\r\n        finally {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * When a page(view) is displayed it will call this method to retreive the data that was stored for this view\r\n     *\r\n     *   @param         the view we must restore data from\r\n     *   @requestables  a requestable from where the data was responded\r\n     *\r\n     *   @return        the data\r\n     */\r\n    public getParamForView(view: any, requestable: string): any {\r\n\r\n        for (var item of (this.c8oResponses as any)) {\r\n            if (item[\"view\"] == view && item[\"requestable\"] == requestable)\r\n                return (item[\"navParams\"]);\r\n        }\r\n        return (new Object());\r\n    }\r\n\r\n\r\n    /**\r\n     * Check if the current view is the same as the one we should route to\r\n     *\r\n     *   @param         activeView, the view we must search\r\n     *   @param         targetView, the view we should route to\r\n     *   @requestable   The requestable for this view\r\n     *\r\n     *   @return        true if the view is found\r\n     */\r\n    public findView(view: any, targetView: any, requestable: string): boolean {\r\n        if (targetView != undefined) {\r\n            if (view == targetView || view == targetView[\"nameStatic\"]) {\r\n                return true;\r\n            }\r\n            return false;\r\n        }\r\n        else {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Utility routine to push / navigateForward on the nav stack a view with data to be passed to the view\r\n     * It's an alias to router.push function \r\n     * \r\n     * @param view the page to be pushed\r\n     * @param data the data to be pushed\r\n     * @param options options to use\r\n     * @returns Promise<boolean> \r\n     */\r\n    public push(view: any, data: any, options: Object): Promise<boolean> {\r\n        let path = this.getPageSegment(view);\r\n        let queryParams = data;\r\n        let url: string = \"\"\r\n        let segments = path.split(\"/\")\r\n        segments.forEach((segment: any)=> {\r\n            let segval = segment\r\n            if (segment.startsWith(\":\")) {\r\n                let key = segment.substring(1)\r\n                if (data[key]) {\r\n                    segval = data[key]\r\n                    delete queryParams[key]\r\n                }\r\n            }\r\n            url = url + \"/\" + segval\r\n        });\r\n        let internalOpts: any = { queryParams: queryParams };\r\n        let optionsMerged: any = {...internalOpts, ...options};\r\n        return this.navController.navigateForward(url, optionsMerged);\r\n    }\r\n    /**\r\n     * Utility routine to push / navigateForward on the nav stack a view with data to be passed to the view\r\n     * It's an alias to router.push function \r\n     * \r\n     * @param view the page to be pushed\r\n     * @param data the data to be pushed\r\n     * @param options options to use\r\n     * @returns Promise<boolean> \r\n     */\r\n    public navigateForward(view: any, data: any, options: Object): Promise<boolean> {\r\n        return this.push(view, data, options);\r\n    }\r\n\r\n    /**\r\n     * This methods goes back in the context of Ionic's stack navigation.\r\n     *\r\n     * It recursively finds the top active `ion-router-outlet` and calls `pop()`.\r\n     * This is the recommended way to go back when you are using `ion-router-outlet`.\r\n     * @returns Promise<void>\r\n     */\r\n    public pop(): Promise<void> {\r\n        return this.navController.pop()\r\n    }\r\n\r\n    /**\r\n     * Utility routine to root / navigateRoot a view / page on the nav stack with data to be passed to the view / page\r\n     * \r\n     * @param view the page to be rooted\r\n     * @param data the data to be rooted\r\n     * @param options options to use\r\n     * @returns Promise<boolean> \r\n     */\r\n    public setRoot(view: any, data: any, options: Object): Promise<boolean> {\r\n        let path = this.getPageSegment(view);\r\n        let queryParams = data;\r\n        let url: string = \"\"\r\n        let segments = path.split(\"/\")\r\n        segments.forEach((segment: any)=> {\r\n            let segval = segment\r\n            if (segment.startsWith(\":\")) {\r\n                let key = segment.substring(1)\r\n                if (data[key]) {\r\n                    segval = data[key]\r\n                    delete queryParams[key]\r\n                }\r\n            }\r\n            url = url + \"/\" + segval\r\n        });\r\n        let internalOpts: any = { queryParams: queryParams };\r\n        let optionsMerged: any = {...internalOpts, ...options};\r\n        return this.navController.navigateRoot(url, optionsMerged);\r\n    }\r\n    /**\r\n     * Utility routine to root / navigateRoot a view / page on the nav stack with data to be passed to the view / page\r\n     * It's an alias to router.setRoot function \r\n     * \r\n     * @param view the page to be rooted\r\n     * @param data  the data to be passed to root\r\n     * @param options the options to be used to root \r\n     */\r\n    public navigateRoot(view: any, data: any, options: Object): Promise<any> {\r\n        return this.setRoot(view, data, options);\r\n    }\r\n\r\n    public getPageSegment(pageName: string){\r\n        let appPages: Array<any> = this.pagesArray;\r\n        for (let i=0; i < appPages.length; i++) {\r\n            if (appPages[i].name == pageName) {\r\n                return appPages[i].url\r\n            }\r\n        }\r\n        return \"/\"\r\n    }\r\n\r\n    /**\r\n     * Client Side OAuth Login. Calling this method will display the OAuth provider's\r\n     * login page. When the users authentifies, the login page will be closed and a\r\n     * Server sequence will be called with the acess token provided. The server is responsible\r\n     * for validating the token and to return some user information. The server also uses\r\n     * Set_Authenticated_User step to flag the curent session authenticated.\r\n     *\r\n     * This is a generic client OAuth. each OAuth provider has a specific url to call to trigger\r\n     * the OAuth implicit flow. Here are somme common providers URLs:\r\n     *\r\n     * - Microsoft Azure V2.0 endpoint\r\n     *      url : https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=<your registred app client id>&response_type=id_token+token&scope=openid%20https%3A%2F%2Fgraph.microsoft.com%2FUser.Read&response_mode=fragment&state=12345&nonce=678910\r\n     *      redirectUri : \"https://login.live.com/oauth20_desktop.srf\"\r\n     *\r\n     * Notes :\r\n     *  This function requires the cordova-plugin-inappbrowser.\r\n     *  This will only work for cordova installed apps.\r\n     *\r\n     * @param url                   The OAuth provider url\r\n     * @param redirectUri           The redirect URI to check\r\n     * @param loginSequence         The server Sequence to be launched to login (Project.Sequence)\r\n     * @param checkTokenSequence    The server Sequence to be used to check if user session is already autenticated (Project.Sequence)\r\n     */\r\n     public doOAuthLogin(url: String, redirectUri: String, loginSequence: string, checkTokenSequence: string): Promise<any> {\r\n        return new Promise((resolve, reject) => {\r\n            let win;\r\n            var isABoringBrowser = navigator.vendor && navigator.vendor.indexOf('Apple') > -1 && navigator.userAgent && navigator.userAgent.indexOf('CriOS') == -1 && navigator.userAgent.indexOf('FxiOS') == -1;\r\n            if(isABoringBrowser && window[\"cordova\"] == undefined){\r\n                win = window.open('about:blank',\"cafLogin\", \"location=no, clearsessioncache=yes, clearcache=yes\");\r\n            }\r\n            this.c8o.callJson(checkTokenSequence).then((data, params) => {\r\n                if (data[\"notoken\"] == \"true\") {\r\n                    this.openOAuthLogin(url, redirectUri).then((parsedResponse) => {\r\n                        this.c8o.log.debug(\"Parsed response is : \" + JSON.stringify(parsedResponse));\r\n\r\n                        this.c8o.callJsonObject(loginSequence, parsedResponse)\r\n                            .then((data: any) => {\r\n                                if (data[\"login\"] != \"ko\") {\r\n                                    resolve(data);\r\n                                }\r\n                                else {\r\n                                    reject(data);\r\n                                }\r\n                                return null;\r\n                            }).fail((err) => {\r\n                                reject(err);\r\n                            })\r\n                    }).catch((err) => {\r\n                        reject(err);\r\n                    })\r\n                }\r\n                else {\r\n                    if(isABoringBrowser){\r\n                        win.close();\r\n                    }\r\n                    resolve(data);\r\n                    return null;\r\n                }\r\n            }).fail((err) => {\r\n                reject(err);\r\n            });\r\n\r\n\r\n        });\r\n    }\r\n\r\n    public openOAuthLogin(url: String, redirectUri: String, isABoringBrowser?, win?): Promise<any> {\r\n        return new Promise((resolve, reject) => {\r\n            if (window[\"cordova\"] != undefined) {\r\n                url += \"&redirect_uri=\" + redirectUri\r\n                const browserRef = window[\"cordova\"].InAppBrowser.open(\r\n                    url,\r\n                    \"_blank\",\r\n                    \"location=no, clearsessioncache=yes, clearcache=yes\"\r\n                );\r\n                let responseParams: string;\r\n                let parsedResponse: Object = {};\r\n                browserRef.addEventListener(\"loadstart\", (evt) => {\r\n                    this.c8o.log.debug(\"Auth Page loaded\")\r\n                    if ((evt.url).indexOf(redirectUri) === 0) {\r\n                        browserRef.removeEventListener(\"exit\", (evt) => { });\r\n                        this.c8o.log.debug(\"Exit Listener removed\")\r\n                        browserRef.close();\r\n                        if (evt.url.indexOf(\"#\") != -1)     // Microsoft Azure\r\n                            responseParams = ((evt.url).split(\"#\")[1]).split(\"&\");\r\n                        else                            // LinkedIN\r\n                            responseParams = ((evt.url).split(\"?\")[1]).split(\"&\");\r\n\r\n                        for (var i = 0; i < responseParams.length; i++) {\r\n                            parsedResponse[responseParams[i].split(\"=\")[0]] = responseParams[i].split(\"=\")[1];\r\n                        }\r\n                        if ((parsedResponse[\"access_token\"] !== undefined &&\r\n                            parsedResponse[\"access_token\"] !== null) || (parsedResponse[\"code\"] !== undefined &&\r\n                                parsedResponse[\"code\"] !== null)) {\r\n                            resolve(parsedResponse);\r\n                        } else {\r\n                            this.c8o.log.error(\"oAuthClient : oAuth authentication error:\" + evt.url)\r\n                            reject(\"oAuth authentication error\");\r\n                        }\r\n                    }\r\n                });\r\n                browserRef.addEventListener(\"exit\",  (evt) =>{\r\n                    this.c8o.log.debug(\"Auth Page closed\")\r\n                });\r\n            }\r\n            else {\r\n                url += \"&redirect_uri=\" + redirectUri;\r\n                if(isABoringBrowser){\r\n                    win.location = url;\r\n                }\r\n                else{\r\n                    window.open(url.toString(), \"cafLogin\", \"location=no, clearsessioncache=yes, clearcache=yes\");\r\n                }\r\n                window.addEventListener('message', (parsedResponse) => {\r\n                    if (parsedResponse.data[\"access_token\"] != undefined &&\r\n                        parsedResponse.data[\"access_token\"] != null) {\r\n                        resolve(parsedResponse.data);\r\n                    }\r\n                    /* \r\n                    Disabled because of bug with captchas (ref #27)\r\n                    else {\r\n                        this.c8o.log.error(\"oAuthClient : oAuth authentication error\");\r\n                        reject(\"oAuth authentication error\");\r\n                    }*/\r\n                });\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Get attachment data url a requestable response to be displayed\r\n     *\r\n     * @param\tid              the DocumentID to get the attachment from\r\n     * @param   attachmentName  name of the attachment to display (eg: image.jpg)\r\n     * @param   placeholderUrl  the url to display while we get the attachment (This is an Async process)\r\n     * @param   imgCache        An array that contains cache.\r\n     * @param   databaseName    the Qname of a FS database (eg project.fsdatabase) to get the attachment from.\r\n     *\r\n     */\r\n    public getAttachmentUrl(id: string, attachmentName: string, placeholderURL: string, imgCache: Object, databaseName?: string): Object {\r\n        if (id != null && attachmentName && databaseName) {\r\n\r\n            databaseName = databaseName.indexOf(\".\") != -1 ? databaseName.split('.')[1] :  databaseName;\r\n            // If no place holder has been defined, define one White 1x1 pixel.\r\n            placeholderURL = placeholderURL ? placeholderURL : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+ip1sAAAAASUVORK5CYII=\"\r\n            if (imgCache[id + \"/\" + attachmentName] == undefined) {\r\n                imgCache[id + \"/\" + attachmentName] = placeholderURL\r\n                this.c8o.get_attachment(id, attachmentName, databaseName).then((response) => {\r\n                    imgCache[id + \"/\" + attachmentName] = this.sanitizer.bypassSecurityTrustUrl(URL.createObjectURL(response))\r\n                }).catch((err) => {\r\n                    // this.c8o.log.error(\"Error getting attachment name: \" + attachmentName, err)\r\n                });\r\n            }\r\n            return imgCache[id + \"/\" + attachmentName]\r\n        } else {\r\n            if (!imgCache[\"c8o__errorslogs\"]) {\r\n                imgCache[\"c8o__errorslogs\"] = true;\r\n                this.c8o.log.error(\"[MB] getAttachmentUrl Missing parameters...\");\r\n            }\r\n            return \"\";\r\n        }\r\n    }\r\n}\r\n","import { ApplicationRef, ChangeDetectorRef, Injectable, InjectionToken, Injector, Type } from \"@angular/core\";\r\nimport { C8oRouter } from \"./convertigo.router\";\r\nimport { LoadingController } from \"@ionic/angular\";\r\nimport { C8o, Semaphore } from \"c8osdkangular\";\r\nimport { C8oCafUtils } from \"./convertigo.utils\";\r\n\r\n@Injectable()\r\nexport class C8oPageBase {\r\n  \r\n  // Data attached to the main form of the page if its existing\r\n  public form = {};\r\n  // A local Object to be used\r\n  public local: any;\r\n  // A shortcut to window\r\n  public window: Window;\r\n  // A shortcut to use routerProvider\r\n  public router: C8oRouter;\r\n  // A shortcut to use router's shared Object\r\n  public global: any;\r\n  // A shortcut to use router's C8o Object\r\n  public c8o: C8o;\r\n  // An application Ref instance\r\n  public appRef: ApplicationRef;\r\n  // A flag that is set to true if the Current page has been leaved\r\n  public didleave: boolean = false;\r\n  // A flag that is set to true if a loader is displayed\r\n  public shown: boolean = false;\r\n  // A flag that helps to count how much call are running at the same time\r\n  private count: number = 0;\r\n  // A unique loader object for the page that is instantiate whenever we made a call\r\n  public loader: any;\r\n  // An object containing cache for images loaded\r\n  private imgCache: Object;\r\n  // A prefix id for this instance\r\n  private prefixId: string;\r\n  // A flag to kwnow if window is closing\r\n  public closing: boolean = false;\r\n  // private semaphore for auto loaders\r\n  private _semaphore: Semaphore = new Semaphore(1);\r\n\r\n  public instanceID : string;\r\n  /**\r\n   * C8oPageBase: Page Base for C8oPage and app component\r\n   *\r\n   * @param {Injector} injector\r\n   * @param {C8oRouter} routerProvider\r\n   * @param {LoadingController} loadingCtrl\r\n   * @param {ChangeDetectorRef} ref\r\n   */\r\n  constructor(public injector: Injector, public routerProvider: C8oRouter, public loadingCtrl: LoadingController, public ref: ChangeDetectorRef) {\r\n\r\n    // Getting additional Injectors\r\n    this.appRef = this.getInstance(ApplicationRef);\r\n\r\n    // Instantiating shortcuts\r\n    this.router = this.routerProvider;\r\n    this.global = this.routerProvider.sharedObject;\r\n    this.c8o = this.routerProvider.c8o;\r\n    this.local = new Object();\r\n\r\n    // Instantiating image cache object\r\n    this.imgCache = new Object();\r\n\r\n    // Instantiating window\r\n    this.window = window;\r\n\r\n    //Instantiating prefix ID\r\n    this.prefixId = \"_C8o\" + new Date().getTime().toString();\r\n\r\n    this.instanceID = (\"\" + Math.random()).substring(1);\r\n  }\r\n\r\n  // Detach mark from view to avoid error (linked to tick function), and disable loader\r\n  ngOnDestroy() {\r\n    this.closing = true;\r\n    this.ref.detach();\r\n    if (this.loader != undefined) {\r\n      this.loader.dismiss()\r\n      .then(()=>{\r\n\r\n      }).catch(()=>{\r\n        // catching error of dismissing\r\n      })\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Retrieves an instance from the injector based on the provided token.\r\n   * If not found:\r\n   * - Throws an error if no `notFoundValue` that is not equal to\r\n   * Injector.THROW_IF_NOT_FOUND is given\r\n   * - Returns the `notFoundValue` otherwise\r\n   *\r\n   * @param token: Type<T>|InjectionToken<T>,  A token with the needed type\r\n   * @param notFoundValue: T\r\n   *\r\n   * @returns An instance of the given token, or an error if not found\r\n   */\r\n  public getInstance<T>(token: Type<T> | InjectionToken<T>, notFoundValue?: T): T {\r\n    return this.injector.get(token, notFoundValue);\r\n  }\r\n\r\n  /**\r\n   Gets the data from previous called requestable list. can be used in an Angular 5 directive such as\r\n   *\r\n   *   *ngFor=\"let category of listen(['fs://.view']).rows\" or\r\n   *   *ngFor=\"let Page2 of listen(['fs://.view', 'fs://.view#search']).rows\"\r\n   *\r\n   * @param {string[]} requestables: an array of requestables (string)\r\n   * @returns {any}: the data for the first requestable to match is returned\r\n   */\r\n  public listen(requestables: string[]): any {\r\n    // removed view parameters to support ngx shared components\r\n    return this.routerProvider.getResponseForView((this.constructor as any).nameStatic ?? \"AppComponent\", requestables, this.instanceID);\r\n  }\r\n  /**\r\n   Delete the data from previous called requestable list. can be used in an Angular 5 directive such as\r\n   *\r\n   *   *ngFor=\"let category of listen(['fs://.view']).rows\" or\r\n   *   *ngFor=\"let Page2 of listen(['fs://.view', 'fs://.view#search']).rows\"\r\n   *\r\n   * @param {string[]} requestables: an array of requestables (string)\r\n   * @returns {boolean}: true if succeed\r\n   */\r\n  public deleteListen(requestables: string[]): any {\r\n    return this.routerProvider.deleteResponseForView((this.constructor as any).nameStatic ?? \"AppComponent\", requestables);\r\n  }\r\n\r\n\r\n  /**\r\n   * Gets the data from previous called requestable list. can be used in an Angular 2 directive such as\r\n   *\r\n   *   *ngFor=\"let category of listen(['fs://.view']).rows\" or\r\n   *   *ngFor=\"let Page2 of listen(['fs://.view', 'fs://.view#search']).rows\"\r\n   *\r\n   * The data for the first requestable to match is returned\r\n   *\r\n   * @return the data for one of the requestables in the list.\r\n   */\r\n  public listenNavParams(requestable: string): any {\r\n    return (this.routerProvider.getParamForView((this.constructor as any).nameStatic ?? \"AppComponent\", requestable));\r\n  }\r\n\r\n  /**\r\n   * Calls a Convertigo requestable with parameters as Object\r\n   *\r\n   * @param requestable: the requestable to call (examples : \"Myproject.MySequence\" or \"fs://MyLocalDataBase.get\")\r\n   * @param data: the data to send to the requestable (for example {\"var1\" : \"value1, ..., \"var2\" : \"value2}) (default value is null)\r\n   * @param navParams: the navParams to give (default value is null)\r\n   * @param {number} timeout: The timeout before trigger loading controller (default value is 3000)\r\n   * @returns {Promise<any>}\r\n   */\r\n  public async call(requestable: string, data: any = null, navParams: any = null, timeout: number = 3000, noLaoding: boolean = false): Promise<any> {\r\n    // A flag that is set to true if the current main call is finished\r\n    let finish: boolean = false;\r\n    if (this.form != {} && data == null) {\r\n      data = this.form;\r\n    }\r\n    if (!noLaoding) {\r\n      setTimeout( async () => {\r\n        await this._semaphore.acquire();\r\n        if (finish == false) {\r\n          if (this.shown != true) {\r\n            \r\n            this.loader = await this.loadingCtrl.create({spinner: this.router.loadingFamily});\r\n            if (!this.closing) {\r\n              this.loader.present()\r\n              this.shown = true;\r\n            }\r\n          }\r\n          this.count++;\r\n        }\r\n        this._semaphore.release();\r\n      }, timeout);\r\n    }\r\n\r\n\r\n    return new Promise((resolve, reject) => {\r\n      this.routerProvider.c8oCall(requestable, data, navParams, this)\r\n        .then(async(response) => {\r\n          resolve(response);\r\n          await this._semaphore.acquire();\r\n          if (!noLaoding) {\r\n            finish = true;\r\n            if (this.shown == true) {\r\n              this.count--;\r\n              if (this.count == 0) {\r\n                this.shown = false;\r\n                if(this.loader != undefined){\r\n                  this.loader.dismiss()\r\n                  .then(()=>{\r\n\r\n                  }).catch(()=>{\r\n                    // catching error of dismissing\r\n                  })\r\n                }\r\n              }\r\n            }\r\n          }\r\n          this._semaphore.release();\r\n          \r\n\r\n        }).catch(async(error) => {\r\n          reject(error);\r\n          await this._semaphore.acquire();\r\n          if (!noLaoding) {\r\n            finish = true;\r\n            if (this.shown == true) {\r\n              this.count--;\r\n              if (this.count == 0) {\r\n                this.shown = false;\r\n                if(this.loader != undefined){\r\n                  this.loader.dismiss()\r\n                  .then(()=>{\r\n\r\n                  }).catch(()=>{\r\n                    // catching error of dismissing\r\n                  })\r\n                }\r\n              }\r\n            }\r\n          }\r\n          this._semaphore.release();\r\n          \r\n        });\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Calls a Convertigo requestable with parameters as Object from a given form\r\n   *\r\n   * @param {string} requestable: the requestable to call (examples : \"Myproject.MySequence\" or \"fs://MyLocalDataBase.get\")\r\n   * @param {string} id: the id of the form\r\n   * @returns {Promise<any>}\r\n   */\r\n  public callForm(requestable: string, id: string): Promise<any> {\r\n    return this.call(requestable, (this.form as any)[id]);\r\n  }\r\n\r\n  /**\r\n   * Mark, the current view in to check state, then detect changes and tick the application ref\r\n   *\r\n   */\r\n  public tick(): void {\r\n    // try catch page.tick because if errors exists in page, this will throw an error and block execution\r\n    try{\r\n      this.ref.markForCheck();\r\n      if (!(this.ref as any)[\"destroyed\"]) {\r\n        this.ref.detectChanges();\r\n        this.appRef.tick();\r\n      }\r\n    }\r\n    catch(e){\r\n\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get attachment data url a requestable response to be displayed\r\n   *\r\n   * @param {string} id: the DocumentID to get the attachment from\r\n   * @param {string} attachmentName: name of the attachment to display (eg: image.jpg)\r\n   * @param {string} placeholderURL: the url to display while we get the attachment (This is an Async process)\r\n   * @param {string} databaseName: the Qname of a FS database (ex project.fsdatabase) to get the attachment from.\r\n   * @returns {Object}\r\n   */\r\n  public getAttachmentUrl(id: string, attachmentName: string, placeholderURL: string, databaseName?: string): Object {\r\n    return this.routerProvider.getAttachmentUrl(id, attachmentName, placeholderURL, this.imgCache, databaseName);\r\n  }\r\n\r\n  /**\r\n   * Reset Image Cache.\r\n   *\r\n   * @param {string} cacheEntry: Name of the Entry to clear. If not provided, clears all the entries\r\n   */\r\n  public resetImageCache(cacheEntry: string = null): void {\r\n    if (cacheEntry) {\r\n      delete this.imgCache[cacheEntry];\r\n      return;\r\n    }\r\n    this.imgCache = [];\r\n  }\r\n\r\n  /**\r\n   * Handles automatically Errors coming from called promises\r\n   *\r\n   * @param {Promise<any>} p The promise returned by a CAF function eg : (click)=\"resolveError(actionBeans.CallSequenceAction(this,{cacheTtl: 3000, ...},{}))\r\n   * @returns {Promise<any>}\r\n   */\r\n  public resolveError(p: Promise<any>): Promise<any> {\r\n    return new Promise((resolve, reject) => {\r\n      p.then((res) => {\r\n        resolve(res);\r\n      }).catch((err) => {\r\n        this.c8o.log.error(\"[CAF] Resolve Error : \" ,err)\r\n        resolve(err);\r\n      });\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Get page definition from it's title\r\n   *\r\n   * @param {string} pageTitle\r\n   * @returns {string}\r\n   */\r\n  public getPageByTitle(pageTitle: string): string {\r\n    for (let p of this.routerProvider.pagesArray) {\r\n      if (p[\"title\"] == pageTitle) {\r\n        return p.component;\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get page definition from it's name\r\n   *\r\n   * @param {string} pageName\r\n   * @returns {string}\r\n   */\r\n  public getPageByName(pageName: string): string {\r\n    for (let p of this.routerProvider.pagesArray) {\r\n      if (p[\"component\"].nameStatic == pageName || p[\"component\"].name == pageName) {\r\n        return p.component;\r\n      }\r\n    }\r\n    return \"\";\r\n  }\r\n\r\n\r\n  /**\r\n   * Helps to safe eval the value of an path into an object or an array\r\n   * This is a shortcut to acess to static function of C8oCafUtils\r\n   *\r\n   * @param object: the object to eval\r\n   * @param path: the path to search\r\n   * @returns {any}: the value fetched or undefined\r\n   */\r\n  public resolveArray(object: any, path: string = null): any {\r\n    return C8oCafUtils.resolveArray(object, path);\r\n  }\r\n\r\n\r\n  /**\r\n  * Concat two words\r\n  * @param {string} word\r\n  * @returns {any}\r\n  */\r\n  public wordPlusOne(word: string): any {\r\n    //this.c8o.log.warn(\"[CAF] @Deprecated: This method will be removed in future versions, please use static method: C8oCafUtils.wordPlusOne(word) instead\");\r\n    C8oCafUtils.wordPlusOne(word);\r\n  }\r\n\r\n  /**\r\n  * Merge two objects\r\n  * @param {Object} firstObj\r\n  * @param secondObj\r\n  * @returns {Object}\r\n  */\r\n  public merge(firstObj: Object, secondObj): Object {\r\n    //this.c8o.log.warn(\"[CAF] @Deprecated: This method will be removed in future versions, please use static method: C8oCafUtils.merge(firstObj: Object, secondObj) instead\");\r\n    return C8oCafUtils.merge(firstObj, secondObj);\r\n  }\r\n\r\n  /**\r\n  * Creates a new Date Object, useful when called from a template as new operator is not allowed\r\n  *\r\n  * @param year\r\n  * @param month\r\n  * @param day\r\n  * @param hours\r\n  * @param minutes\r\n  * @param seconds\r\n  * @param milliseconds\r\n  * @returns {Date}\r\n  * @constructor\r\n  */\r\n  public Date(year: any, month: any, day: any, hours: any, minutes: any, seconds: any, milliseconds: any) {\r\n    //this.c8o.log.warn(\"[CAF] @Deprecated: This method will be removed in future versions, please use static method: C8oCafUtils.Date(year :any, month:any, day:any, hours:any, minutes:any, seconds:any, milliseconds:any) instead\");\r\n    return C8oCafUtils.Date(year, month, day, hours, minutes, seconds, milliseconds);\r\n  }\r\n\r\n  /**\r\n   * This functions is helpfull to know if a string version is greater than another\r\n   * @param v1 string version\r\n   * @param v2 string version\r\n   * @param separator separator between subversions default value is \".\"\r\n   * \r\n   * @returns true if v1 < v2 otherwise returns false\r\n   */\r\n  public compare(v1:string, v2: string, separator: string = \".\"){\r\n    let v1Tab: Array<string> = v1.split(separator);\r\n    let v2Tab: Array<string> = v2.split(separator);\r\n    for(let i in v1Tab){\r\n      let v1Num = +v1Tab[i];\r\n      let v2Num = +v2Tab[i];\r\n      if(v1Num <= v2Num){\r\n        return true;\r\n      }\r\n      else if(v1Num > v2Num){\r\n        return false;\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n}","import { C8oRouter }                                    from './convertigo.router'\nimport {LoadingController, MenuController}                from '@ionic/angular';\nimport { DomSanitizer }                                 from '@angular/platform-browser';\nimport {ChangeDetectorRef, Injectable, Injector} from \"@angular/core\";\nimport {C8oPageBase} from \"./convertigo.base\";\n\n@Injectable()\nexport class C8oPage extends C8oPageBase {\n\n  // A Menu ID for this instance\n  public startMenuId :string;\n  public endMenuId :string;\n  private didLoad;\n\n  /**\n   * C8oPage : An Class inherited from C8oPageBase that give us more page specific methods\n   * @param {C8oRouter} routerProvider\n   * @param {NavParams} navParams\n   * @param {LoadingController} loadingCtrl\n   * @param {DomSanitizer} sanitizer\n   * @param {ChangeDetectorRef} ref\n   * @param {Injector} injector\n   * @param {MenuController} menuCtrl\n   */\n  constructor(routerProvider : C8oRouter, loadingCtrl: LoadingController, sanitizer: DomSanitizer,\n              ref: ChangeDetectorRef,injector: Injector, public menuCtrl: MenuController){\n      super(injector, routerProvider, loadingCtrl, ref);\n    }\n\n  /**\n   * Closes menu in a given page instance\n   * @param that instance of the page\n   */\n \tasync closeMenu(that) {\n    try{\n      await that.menuCtrl.close();\n      that.menuCtrl.isOpen()\n    }\n    catch(e: any){\n      this.c8o.log.error(\"[CAF] closeMenu has encountered an error  : \", e);\n    }\n\t}\n\t\n  /**\n   * Enables menu in a given page instance\n   * @param that instance of the page\n   * @returns success: boolean\n   */\n  async enableMenus(that) {\n    try{\n      if (!(that.startMenuId == null || that.startMenuId == undefined || that.startMenuId == '')) {\n        await that.menuCtrl.enable(true, that.startMenuId);\n      }\n      if (!(that.endMenuId == null || that.endMenuId == undefined || that.endMenuId == '')) {\n        await that.menuCtrl.enable(true, that.endMenuId);\n      }\n      return true;\n    }\n    catch(e: any){\n      this.c8o.log.error(\"[CAF] enableMenus has encountered an error  : \", e);\n      return false;\n    }\n  }\n\n  /**\n   * Runs when the page is about to enter and become the active page.\n   */\n  public ionViewWillEnter(){\n      this.closeMenu(this);\n      this.enableMenus(this);\n  }\n\n  /**\n   * Runs when the page has fully entered and is now the active page. This event will fire, whether it was the first load or a cached page.\n   */\n  public ionViewDidEnter(){\n      this.didLoad = true;\n      /* Handle Piwik Matomo if present */\n      if (window[\"_paq\"]) {\n        window[\"_paq\"].push(['setDocumentTitle', (this.constructor as any).nameStatic ?? \"AppComponent\"]);\n        window[\"_paq\"].push(['trackPageView']);\n      }\n  }\n\n  /**\n   * Runs when the page has finished leaving and is no longer the active page.\n   */\n  public ionViewDidLeave(){\n    this.didleave = true;\n  }\n\n  /**\n   * Runs when the page has finished leaving and is no longer the active page.\n   */\n  public ionViewWillLeave(){\n  }\n\n  /**\n   * Fired once during component initialization. This event can be used to initialize local members and make calls into services that only need to be done once.\n   */\n  ngOnInit() {\n    this.closing = false;\n  } \n\n  /**\n   * Fired right before Angular destroys the view. Useful for cleanup like unsubscribing from observables.\n   */\n  override ngOnDestroy() {\n    super.ngOnDestroy();\n    this.closing = true;\n  }\n}\n","/*\n * Public API Surface of c8ocaf\n */\n\nexport * from './lib/convertigo.base';\nexport * from './lib/convertigo.page';\nexport * from './lib/convertigo.router';\nexport * from './lib/convertigo.utils';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Semaphore"],"mappings":"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"}