Subversion Repository Public Repository

Nextrek

1
{"uid":"620201AFKF664A4AABSBECAE71A1610CBF73","isLoaded":true,"lastModificationTime":0,"items":{"name":"Component_TextBehavior","type":"game_script","order":0,"content":"# ===================================================================\n#\n#   Script: Component_TextBehavior\n#\n#   $$COPYRIGHT$$\n#\n# ===================================================================\nclass Component_TextBehavior extends gs.Component\n    @memoryUsage: 0\n    \n    ###*\n    * Called if this object instance is restored from a data-bundle. It can be used\n    * re-assign event-handler, anonymous functions, etc.\n    * \n    * @method onDataBundleRestore.\n    * @param Object data - The data-bundle\n    * @param gs.ObjectCodecContext context - The codec-context.\n    ###\n    onDataBundleRestore: (data, context) ->\n        if @renderedLines\n            size = @object.textRenderer.measureFormattedLines(@renderedLines, @object.wordWrap ? yes)\n            @refreshWithSize(size)\n            @refreshBitmap()\n            @object.textRenderer.drawFormattedLines(@padding.left, @padding.top, @padding.right, @padding.bottom, @renderedLines, @object.wordWrap ? yes)\n        else\n            @refresh(true)\n        \n    ###*\n    * \n    *\n    * @module gs\n    * @class Component_TextBehavior\n    * @extends gs.Component\n    * @memberof gs\n    * @constructor\n    ###\n    constructor: () ->\n        super()\n\n        ###*\n        * The current text displayed.\n        * @property text\n        * @type string\n        * @protected\n        ###\n        @text = \"\"\n        \n        @renderedLines = null\n        \n        ###*\n        * The space around the text.\n        * @property padding\n        * @type string\n        * @protected\n        ###\n        @padding = new ui.Space(6, 0, 6, 0);\n        \n        ###*\n        * The font used for text-rendering.\n        * @property font\n        * @type string\n        * @protected\n        ###\n        @font = new Font(gs.Fonts.TEXT)\n        \n        ###*\n        * Standard Format String which can be used if the text represents a number value.\n        * Example: If the text is \"3\" and format is \"%0d3\" then 003 is the displayed text.\n        * @property format\n        * @type string\n        * @protected\n        ###\n        @format = null\n        \n    ###*\n    * Disposes the component and bitmap.\n    *\n    * @method dispose\n    ###\n    dispose: ->\n        if @object.bitmap?\n            @object.bitmap.dispose()\n            @object.bitmap = null\n    \n    ###*\n    * Redraws the texts on game object's bitmap.\n    *\n    * @method redraw\n    ###\n    redraw: ->\n        if @text?\n            @object.bitmap.clear()\n            @object.bitmap.font = @object.font\n            text = lcs(@text)\n            if @format?\n                text = sprintf(@format, text)\n                \n            if @object.formatting\n                @renderedLines = @object.textRenderer.drawFormattedText(@padding.left, @padding.top, @padding.right, @padding.bottom, text, @object.wordWrap ? yes)\n            else\n                @object.textRenderer.drawText(@padding.left, @padding.top, @padding.right, @padding.bottom, text)\n\n    ###*\n    * Updates the game object's <b>dstRect</b> so that the text fits in. That only works\n    * if the game object's <b>sizeToFit</b> property is set.\n    *\n    * @method refreshSize\n    ###\n    refreshSize: ->\n        if not @object.text?  then return\n        \n        @text = @object.text\n        text = lcs(@object.text).toString()\n        \n        if @format?\n            text = sprintf(@format, text)\n            \n        if @object.sizeToFit\n            @object.font = @object.font || @font\n            if @object.formatting\n                size = @object.textRenderer.measureFormattedText(text, @object.wordWrap ? yes)\n            else\n                size = @object.textRenderer.measureText(text)\n            @refreshWithSize(size)\n    \n    ###*\n    * Updates the game object's <b>dstRect</b> with the specified text size.\n    *\n    * @param {gs.Size} size - The text size to resize the game object for.\n    * @method refreshWithSize\n    ###\n    refreshWithSize: (size) ->\n        if !(@object.sizeToFit.horizontal?) or @object.sizeToFit.horizontal\n                @object.dstRect.width = size.width + @padding.right + @padding.left\n        if !(@object.sizeToFit.vertical?) or @object.sizeToFit.vertical\n            @object.dstRect.height = size.height + @padding.bottom + @padding.top\n     \n    ###*\n    * Recreates and clears the game object's bitmap if necessary.\n    *\n    * @method refreshBitmap\n    ###\n    refreshBitmap: ->\n        width = @object.bitmap?.width || 0\n        height = @object.bitmap?.height || 0\n        \n        if(!@object.bitmap or width != @object.dstRect.width or height != @object.dstRect.height)\n            @object.bitmap?.dispose()\n            @object.bitmap = new Bitmap(@object.dstRect.width , @object.dstRect.height)\n        else\n            @object.bitmap.clear()\n            \n        @object.bitmap.font = @object.font\n            \n    ###*\n    * Refreshes the texts on game object's bitmap. If the text or font has not been\n    * changed, no refresh will happen.\n    *\n    * @method refresh\n    * @param {boolean} force - If set to <b>true</b> it will force redrawing the text even if the\n    * text and font has not been changed.\n    ###            \n    refresh: (force) ->\n        fontChange = !@font.compare(@object.font)\n        if !@object.text? or (!force and @object.text == @text and !fontChange) then return\n        \n        @font.set(@object.font) if fontChange\n        @refreshSize()\n        @refreshBitmap()\n        \n        @srcRect = new Rect(0, 0, @object.dstRect.width , @object.dstRect.height)\n        @object.srcRect = @srcRect\n        @redraw()\n    \n    ###*\n    * Action to append a specified text.\n    *\n    * @method addText\n    * @param {Object} sender - The sender of the action.\n    * @param {Object} params - The action's parameters.\n    ###  \n    addText: (sender, params) ->\n        @object.text += ui.Component_FormulaHandler.fieldValue(sender, params.text)\n     \n    ###*\n    * Updates the component. Checks if the game object's bitmap needs a refresh\n    * and maybe disposes the bitmap if the game object's is out of the\n    * screen and memory usage is too high.\n    *\n    * @method update\n    ###     \n    update: ->\n        super\n        visible = @object.visual.visible\n            \n        if (!@object.bitmap or @object.bitmap.width != @object.dstRect.width or @object.bitmap.height != @object.dstRect.height or lcs(@object.text)?.toString() != lcs(@text))\n            @refresh()\n    \ngs.Component_TextBehavior = Component_TextBehavior","parentId":"01A95DA3K01E8A4CB4SBE17E790BCE1FC035","folder":false,"compiledContent":"var Component_TextBehavior,\n  extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  hasProp = {}.hasOwnProperty;\n\nComponent_TextBehavior = (function(superClass) {\n  extend(Component_TextBehavior, superClass);\n\n  Component_TextBehavior.memoryUsage = 0;\n\n\n  /**\n  * Called if this object instance is restored from a data-bundle. It can be used\n  * re-assign event-handler, anonymous functions, etc.\n  * \n  * @method onDataBundleRestore.\n  * @param Object data - The data-bundle\n  * @param gs.ObjectCodecContext context - The codec-context.\n   */\n\n  Component_TextBehavior.prototype.onDataBundleRestore = function(data, context) {\n    var ref, ref1, size;\n    if (this.renderedLines) {\n      size = this.object.textRenderer.measureFormattedLines(this.renderedLines, (ref = this.object.wordWrap) != null ? ref : true);\n      this.refreshWithSize(size);\n      this.refreshBitmap();\n      return this.object.textRenderer.drawFormattedLines(this.padding.left, this.padding.top, this.padding.right, this.padding.bottom, this.renderedLines, (ref1 = this.object.wordWrap) != null ? ref1 : true);\n    } else {\n      return this.refresh(true);\n    }\n  };\n\n\n  /**\n  * \n  *\n  * @module gs\n  * @class Component_TextBehavior\n  * @extends gs.Component\n  * @memberof gs\n  * @constructor\n   */\n\n  function Component_TextBehavior() {\n    Component_TextBehavior.__super__.constructor.call(this);\n\n    /**\n    * The current text displayed.\n    * @property text\n    * @type string\n    * @protected\n     */\n    this.text = \"\";\n    this.renderedLines = null;\n\n    /**\n    * The space around the text.\n    * @property padding\n    * @type string\n    * @protected\n     */\n    this.padding = new ui.Space(6, 0, 6, 0);\n\n    /**\n    * The font used for text-rendering.\n    * @property font\n    * @type string\n    * @protected\n     */\n    this.font = new Font(gs.Fonts.TEXT);\n\n    /**\n    * Standard Format String which can be used if the text represents a number value.\n    * Example: If the text is \"3\" and format is \"%0d3\" then 003 is the displayed text.\n    * @property format\n    * @type string\n    * @protected\n     */\n    this.format = null;\n  }\n\n\n  /**\n  * Disposes the component and bitmap.\n  *\n  * @method dispose\n   */\n\n  Component_TextBehavior.prototype.dispose = function() {\n    if (this.object.bitmap != null) {\n      this.object.bitmap.dispose();\n      return this.object.bitmap = null;\n    }\n  };\n\n\n  /**\n  * Redraws the texts on game object's bitmap.\n  *\n  * @method redraw\n   */\n\n  Component_TextBehavior.prototype.redraw = function() {\n    var ref, text;\n    if (this.text != null) {\n      this.object.bitmap.clear();\n      this.object.bitmap.font = this.object.font;\n      text = lcs(this.text);\n      if (this.format != null) {\n        text = sprintf(this.format, text);\n      }\n      if (this.object.formatting) {\n        return this.renderedLines = this.object.textRenderer.drawFormattedText(this.padding.left, this.padding.top, this.padding.right, this.padding.bottom, text, (ref = this.object.wordWrap) != null ? ref : true);\n      } else {\n        return this.object.textRenderer.drawText(this.padding.left, this.padding.top, this.padding.right, this.padding.bottom, text);\n      }\n    }\n  };\n\n\n  /**\n  * Updates the game object's <b>dstRect</b> so that the text fits in. That only works\n  * if the game object's <b>sizeToFit</b> property is set.\n  *\n  * @method refreshSize\n   */\n\n  Component_TextBehavior.prototype.refreshSize = function() {\n    var ref, size, text;\n    if (this.object.text == null) {\n      return;\n    }\n    this.text = this.object.text;\n    text = lcs(this.object.text).toString();\n    if (this.format != null) {\n      text = sprintf(this.format, text);\n    }\n    if (this.object.sizeToFit) {\n      this.object.font = this.object.font || this.font;\n      if (this.object.formatting) {\n        size = this.object.textRenderer.measureFormattedText(text, (ref = this.object.wordWrap) != null ? ref : true);\n      } else {\n        size = this.object.textRenderer.measureText(text);\n      }\n      return this.refreshWithSize(size);\n    }\n  };\n\n\n  /**\n  * Updates the game object's <b>dstRect</b> with the specified text size.\n  *\n  * @param {gs.Size} size - The text size to resize the game object for.\n  * @method refreshWithSize\n   */\n\n  Component_TextBehavior.prototype.refreshWithSize = function(size) {\n    if (!(this.object.sizeToFit.horizontal != null) || this.object.sizeToFit.horizontal) {\n      this.object.dstRect.width = size.width + this.padding.right + this.padding.left;\n    }\n    if (!(this.object.sizeToFit.vertical != null) || this.object.sizeToFit.vertical) {\n      return this.object.dstRect.height = size.height + this.padding.bottom + this.padding.top;\n    }\n  };\n\n\n  /**\n  * Recreates and clears the game object's bitmap if necessary.\n  *\n  * @method refreshBitmap\n   */\n\n  Component_TextBehavior.prototype.refreshBitmap = function() {\n    var height, ref, ref1, ref2, width;\n    width = ((ref = this.object.bitmap) != null ? ref.width : void 0) || 0;\n    height = ((ref1 = this.object.bitmap) != null ? ref1.height : void 0) || 0;\n    if (!this.object.bitmap || width !== this.object.dstRect.width || height !== this.object.dstRect.height) {\n      if ((ref2 = this.object.bitmap) != null) {\n        ref2.dispose();\n      }\n      this.object.bitmap = new Bitmap(this.object.dstRect.width, this.object.dstRect.height);\n    } else {\n      this.object.bitmap.clear();\n    }\n    return this.object.bitmap.font = this.object.font;\n  };\n\n\n  /**\n  * Refreshes the texts on game object's bitmap. If the text or font has not been\n  * changed, no refresh will happen.\n  *\n  * @method refresh\n  * @param {boolean} force - If set to <b>true</b> it will force redrawing the text even if the\n  * text and font has not been changed.\n   */\n\n  Component_TextBehavior.prototype.refresh = function(force) {\n    var fontChange;\n    fontChange = !this.font.compare(this.object.font);\n    if ((this.object.text == null) || (!force && this.object.text === this.text && !fontChange)) {\n      return;\n    }\n    if (fontChange) {\n      this.font.set(this.object.font);\n    }\n    this.refreshSize();\n    this.refreshBitmap();\n    this.srcRect = new Rect(0, 0, this.object.dstRect.width, this.object.dstRect.height);\n    this.object.srcRect = this.srcRect;\n    return this.redraw();\n  };\n\n\n  /**\n  * Action to append a specified text.\n  *\n  * @method addText\n  * @param {Object} sender - The sender of the action.\n  * @param {Object} params - The action's parameters.\n   */\n\n  Component_TextBehavior.prototype.addText = function(sender, params) {\n    return this.object.text += ui.Component_FormulaHandler.fieldValue(sender, params.text);\n  };\n\n\n  /**\n  * Updates the component. Checks if the game object's bitmap needs a refresh\n  * and maybe disposes the bitmap if the game object's is out of the\n  * screen and memory usage is too high.\n  *\n  * @method update\n   */\n\n  Component_TextBehavior.prototype.update = function() {\n    var ref, visible;\n    Component_TextBehavior.__super__.update.apply(this, arguments);\n    visible = this.object.visual.visible;\n    if (!this.object.bitmap || this.object.bitmap.width !== this.object.dstRect.width || this.object.bitmap.height !== this.object.dstRect.height || ((ref = lcs(this.object.text)) != null ? ref.toString() : void 0) !== lcs(this.text)) {\n      return this.refresh();\n    }\n  };\n\n  return Component_TextBehavior;\n\n})(gs.Component);\n\ngs.Component_TextBehavior = Component_TextBehavior;\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLElBQUEsc0JBQUE7RUFBQTs7O0FBQU07OztFQUNGLHNCQUFDLENBQUEsV0FBRCxHQUFjOzs7QUFFZDs7Ozs7Ozs7O21DQVFBLG1CQUFBLEdBQXFCLFNBQUMsSUFBRCxFQUFPLE9BQVA7QUFDakIsUUFBQTtJQUFBLElBQUcsSUFBQyxDQUFBLGFBQUo7TUFDSSxJQUFBLEdBQU8sSUFBQyxDQUFBLE1BQU0sQ0FBQyxZQUFZLENBQUMscUJBQXJCLENBQTJDLElBQUMsQ0FBQSxhQUE1QywrQ0FBOEUsSUFBOUU7TUFDUCxJQUFDLENBQUEsZUFBRCxDQUFpQixJQUFqQjtNQUNBLElBQUMsQ0FBQSxhQUFELENBQUE7YUFDQSxJQUFDLENBQUEsTUFBTSxDQUFDLFlBQVksQ0FBQyxrQkFBckIsQ0FBd0MsSUFBQyxDQUFBLE9BQU8sQ0FBQyxJQUFqRCxFQUF1RCxJQUFDLENBQUEsT0FBTyxDQUFDLEdBQWhFLEVBQXFFLElBQUMsQ0FBQSxPQUFPLENBQUMsS0FBOUUsRUFBcUYsSUFBQyxDQUFBLE9BQU8sQ0FBQyxNQUE5RixFQUFzRyxJQUFDLENBQUEsYUFBdkcsaURBQXlJLElBQXpJLEVBSko7S0FBQSxNQUFBO2FBTUksSUFBQyxDQUFBLE9BQUQsQ0FBUyxJQUFULEVBTko7O0VBRGlCOzs7QUFTckI7Ozs7Ozs7Ozs7RUFTYSxnQ0FBQTtJQUNULHNEQUFBOztBQUVBOzs7Ozs7SUFNQSxJQUFDLENBQUEsSUFBRCxHQUFRO0lBRVIsSUFBQyxDQUFBLGFBQUQsR0FBaUI7O0FBRWpCOzs7Ozs7SUFNQSxJQUFDLENBQUEsT0FBRCxHQUFlLElBQUEsRUFBRSxDQUFDLEtBQUgsQ0FBUyxDQUFULEVBQVksQ0FBWixFQUFlLENBQWYsRUFBa0IsQ0FBbEI7O0FBRWY7Ozs7OztJQU1BLElBQUMsQ0FBQSxJQUFELEdBQVksSUFBQSxJQUFBLENBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFkOztBQUVaOzs7Ozs7O0lBT0EsSUFBQyxDQUFBLE1BQUQsR0FBVTtFQXBDRDs7O0FBc0NiOzs7Ozs7bUNBS0EsT0FBQSxHQUFTLFNBQUE7SUFDTCxJQUFHLDBCQUFIO01BQ0ksSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBZixDQUFBO2FBQ0EsSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFSLEdBQWlCLEtBRnJCOztFQURLOzs7QUFLVDs7Ozs7O21DQUtBLE1BQUEsR0FBUSxTQUFBO0FBQ0osUUFBQTtJQUFBLElBQUcsaUJBQUg7TUFDSSxJQUFDLENBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFmLENBQUE7TUFDQSxJQUFDLENBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFmLEdBQXNCLElBQUMsQ0FBQSxNQUFNLENBQUM7TUFDOUIsSUFBQSxHQUFPLEdBQUEsQ0FBSSxJQUFDLENBQUEsSUFBTDtNQUNQLElBQUcsbUJBQUg7UUFDSSxJQUFBLEdBQU8sT0FBQSxDQUFRLElBQUMsQ0FBQSxNQUFULEVBQWlCLElBQWpCLEVBRFg7O01BR0EsSUFBRyxJQUFDLENBQUEsTUFBTSxDQUFDLFVBQVg7ZUFDSSxJQUFDLENBQUEsYUFBRCxHQUFpQixJQUFDLENBQUEsTUFBTSxDQUFDLFlBQVksQ0FBQyxpQkFBckIsQ0FBdUMsSUFBQyxDQUFBLE9BQU8sQ0FBQyxJQUFoRCxFQUFzRCxJQUFDLENBQUEsT0FBTyxDQUFDLEdBQS9ELEVBQW9FLElBQUMsQ0FBQSxPQUFPLENBQUMsS0FBN0UsRUFBb0YsSUFBQyxDQUFBLE9BQU8sQ0FBQyxNQUE3RixFQUFxRyxJQUFyRywrQ0FBOEgsSUFBOUgsRUFEckI7T0FBQSxNQUFBO2VBR0ksSUFBQyxDQUFBLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBckIsQ0FBOEIsSUFBQyxDQUFBLE9BQU8sQ0FBQyxJQUF2QyxFQUE2QyxJQUFDLENBQUEsT0FBTyxDQUFDLEdBQXRELEVBQTJELElBQUMsQ0FBQSxPQUFPLENBQUMsS0FBcEUsRUFBMkUsSUFBQyxDQUFBLE9BQU8sQ0FBQyxNQUFwRixFQUE0RixJQUE1RixFQUhKO09BUEo7O0VBREk7OztBQWFSOzs7Ozs7O21DQU1BLFdBQUEsR0FBYSxTQUFBO0FBQ1QsUUFBQTtJQUFBLElBQU8sd0JBQVA7QUFBMkIsYUFBM0I7O0lBRUEsSUFBQyxDQUFBLElBQUQsR0FBUSxJQUFDLENBQUEsTUFBTSxDQUFDO0lBQ2hCLElBQUEsR0FBTyxHQUFBLENBQUksSUFBQyxDQUFBLE1BQU0sQ0FBQyxJQUFaLENBQWlCLENBQUMsUUFBbEIsQ0FBQTtJQUVQLElBQUcsbUJBQUg7TUFDSSxJQUFBLEdBQU8sT0FBQSxDQUFRLElBQUMsQ0FBQSxNQUFULEVBQWlCLElBQWpCLEVBRFg7O0lBR0EsSUFBRyxJQUFDLENBQUEsTUFBTSxDQUFDLFNBQVg7TUFDSSxJQUFDLENBQUEsTUFBTSxDQUFDLElBQVIsR0FBZSxJQUFDLENBQUEsTUFBTSxDQUFDLElBQVIsSUFBZ0IsSUFBQyxDQUFBO01BQ2hDLElBQUcsSUFBQyxDQUFBLE1BQU0sQ0FBQyxVQUFYO1FBQ0ksSUFBQSxHQUFPLElBQUMsQ0FBQSxNQUFNLENBQUMsWUFBWSxDQUFDLG9CQUFyQixDQUEwQyxJQUExQywrQ0FBbUUsSUFBbkUsRUFEWDtPQUFBLE1BQUE7UUFHSSxJQUFBLEdBQU8sSUFBQyxDQUFBLE1BQU0sQ0FBQyxZQUFZLENBQUMsV0FBckIsQ0FBaUMsSUFBakMsRUFIWDs7YUFJQSxJQUFDLENBQUEsZUFBRCxDQUFpQixJQUFqQixFQU5KOztFQVRTOzs7QUFpQmI7Ozs7Ozs7bUNBTUEsZUFBQSxHQUFpQixTQUFDLElBQUQ7SUFDYixJQUFHLENBQUMsQ0FBQyx3Q0FBRCxDQUFELElBQW9DLElBQUMsQ0FBQSxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQXpEO01BQ1EsSUFBQyxDQUFBLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBaEIsR0FBd0IsSUFBSSxDQUFDLEtBQUwsR0FBYSxJQUFDLENBQUEsT0FBTyxDQUFDLEtBQXRCLEdBQThCLElBQUMsQ0FBQSxPQUFPLENBQUMsS0FEdkU7O0lBRUEsSUFBRyxDQUFDLENBQUMsc0NBQUQsQ0FBRCxJQUFrQyxJQUFDLENBQUEsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUF2RDthQUNJLElBQUMsQ0FBQSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQWhCLEdBQXlCLElBQUksQ0FBQyxNQUFMLEdBQWMsSUFBQyxDQUFBLE9BQU8sQ0FBQyxNQUF2QixHQUFnQyxJQUFDLENBQUEsT0FBTyxDQUFDLElBRHRFOztFQUhhOzs7QUFNakI7Ozs7OzttQ0FLQSxhQUFBLEdBQWUsU0FBQTtBQUNYLFFBQUE7SUFBQSxLQUFBLDRDQUFzQixDQUFFLGVBQWhCLElBQXlCO0lBQ2pDLE1BQUEsOENBQXVCLENBQUUsZ0JBQWhCLElBQTBCO0lBRW5DLElBQUcsQ0FBQyxJQUFDLENBQUEsTUFBTSxDQUFDLE1BQVQsSUFBbUIsS0FBQSxLQUFTLElBQUMsQ0FBQSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQTVDLElBQXFELE1BQUEsS0FBVSxJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFsRjs7WUFDa0IsQ0FBRSxPQUFoQixDQUFBOztNQUNBLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBUixHQUFxQixJQUFBLE1BQUEsQ0FBTyxJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUF2QixFQUErQixJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUEvQyxFQUZ6QjtLQUFBLE1BQUE7TUFJSSxJQUFDLENBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFmLENBQUEsRUFKSjs7V0FNQSxJQUFDLENBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFmLEdBQXNCLElBQUMsQ0FBQSxNQUFNLENBQUM7RUFWbkI7OztBQVlmOzs7Ozs7Ozs7bUNBUUEsT0FBQSxHQUFTLFNBQUMsS0FBRDtBQUNMLFFBQUE7SUFBQSxVQUFBLEdBQWEsQ0FBQyxJQUFDLENBQUEsSUFBSSxDQUFDLE9BQU4sQ0FBYyxJQUFDLENBQUEsTUFBTSxDQUFDLElBQXRCO0lBQ2QsSUFBSSwwQkFBRCxJQUFrQixDQUFDLENBQUMsS0FBRCxJQUFXLElBQUMsQ0FBQSxNQUFNLENBQUMsSUFBUixLQUFnQixJQUFDLENBQUEsSUFBNUIsSUFBcUMsQ0FBQyxVQUF2QyxDQUFyQjtBQUE2RSxhQUE3RTs7SUFFQSxJQUEyQixVQUEzQjtNQUFBLElBQUMsQ0FBQSxJQUFJLENBQUMsR0FBTixDQUFVLElBQUMsQ0FBQSxNQUFNLENBQUMsSUFBbEIsRUFBQTs7SUFDQSxJQUFDLENBQUEsV0FBRCxDQUFBO0lBQ0EsSUFBQyxDQUFBLGFBQUQsQ0FBQTtJQUVBLElBQUMsQ0FBQSxPQUFELEdBQWUsSUFBQSxJQUFBLENBQUssQ0FBTCxFQUFRLENBQVIsRUFBVyxJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUEzQixFQUFtQyxJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFuRDtJQUNmLElBQUMsQ0FBQSxNQUFNLENBQUMsT0FBUixHQUFrQixJQUFDLENBQUE7V0FDbkIsSUFBQyxDQUFBLE1BQUQsQ0FBQTtFQVZLOzs7QUFZVDs7Ozs7Ozs7bUNBT0EsT0FBQSxHQUFTLFNBQUMsTUFBRCxFQUFTLE1BQVQ7V0FDTCxJQUFDLENBQUEsTUFBTSxDQUFDLElBQVIsSUFBZ0IsRUFBRSxDQUFDLHdCQUF3QixDQUFDLFVBQTVCLENBQXVDLE1BQXZDLEVBQStDLE1BQU0sQ0FBQyxJQUF0RDtFQURYOzs7QUFHVDs7Ozs7Ozs7bUNBT0EsTUFBQSxHQUFRLFNBQUE7QUFDSixRQUFBO0lBQUEsb0RBQUEsU0FBQTtJQUNBLE9BQUEsR0FBVSxJQUFDLENBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUV6QixJQUFJLENBQUMsSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFULElBQW1CLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQWYsS0FBd0IsSUFBQyxDQUFBLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBM0QsSUFBb0UsSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBZixLQUF5QixJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUE3RyxnREFBd0ksQ0FBRSxRQUFuQixDQUFBLFdBQUEsS0FBaUMsR0FBQSxDQUFJLElBQUMsQ0FBQSxJQUFMLENBQTVKO2FBQ0ksSUFBQyxDQUFBLE9BQUQsQ0FBQSxFQURKOztFQUpJOzs7O0dBeEx5QixFQUFFLENBQUM7O0FBK0x4QyxFQUFFLENBQUMsc0JBQUgsR0FBNEIiLCJzb3VyY2VzQ29udGVudCI6WyIjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiNcbiMgICBTY3JpcHQ6IENvbXBvbmVudF9UZXh0QmVoYXZpb3JcbiNcbiMgICAkJENPUFlSSUdIVCQkXG4jXG4jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmNsYXNzIENvbXBvbmVudF9UZXh0QmVoYXZpb3IgZXh0ZW5kcyBncy5Db21wb25lbnRcbiAgICBAbWVtb3J5VXNhZ2U6IDBcbiAgICBcbiAgICAjIyMqXG4gICAgKiBDYWxsZWQgaWYgdGhpcyBvYmplY3QgaW5zdGFuY2UgaXMgcmVzdG9yZWQgZnJvbSBhIGRhdGEtYnVuZGxlLiBJdCBjYW4gYmUgdXNlZFxuICAgICogcmUtYXNzaWduIGV2ZW50LWhhbmRsZXIsIGFub255bW91cyBmdW5jdGlvbnMsIGV0Yy5cbiAgICAqIFxuICAgICogQG1ldGhvZCBvbkRhdGFCdW5kbGVSZXN0b3JlLlxuICAgICogQHBhcmFtIE9iamVjdCBkYXRhIC0gVGhlIGRhdGEtYnVuZGxlXG4gICAgKiBAcGFyYW0gZ3MuT2JqZWN0Q29kZWNDb250ZXh0IGNvbnRleHQgLSBUaGUgY29kZWMtY29udGV4dC5cbiAgICAjIyNcbiAgICBvbkRhdGFCdW5kbGVSZXN0b3JlOiAoZGF0YSwgY29udGV4dCkgLT5cbiAgICAgICAgaWYgQHJlbmRlcmVkTGluZXNcbiAgICAgICAgICAgIHNpemUgPSBAb2JqZWN0LnRleHRSZW5kZXJlci5tZWFzdXJlRm9ybWF0dGVkTGluZXMoQHJlbmRlcmVkTGluZXMsIEBvYmplY3Qud29yZFdyYXAgPyB5ZXMpXG4gICAgICAgICAgICBAcmVmcmVzaFdpdGhTaXplKHNpemUpXG4gICAgICAgICAgICBAcmVmcmVzaEJpdG1hcCgpXG4gICAgICAgICAgICBAb2JqZWN0LnRleHRSZW5kZXJlci5kcmF3Rm9ybWF0dGVkTGluZXMoQHBhZGRpbmcubGVmdCwgQHBhZGRpbmcudG9wLCBAcGFkZGluZy5yaWdodCwgQHBhZGRpbmcuYm90dG9tLCBAcmVuZGVyZWRMaW5lcywgQG9iamVjdC53b3JkV3JhcCA/IHllcylcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgQHJlZnJlc2godHJ1ZSlcbiAgICAgICAgXG4gICAgIyMjKlxuICAgICogXG4gICAgKlxuICAgICogQG1vZHVsZSBnc1xuICAgICogQGNsYXNzIENvbXBvbmVudF9UZXh0QmVoYXZpb3JcbiAgICAqIEBleHRlbmRzIGdzLkNvbXBvbmVudFxuICAgICogQG1lbWJlcm9mIGdzXG4gICAgKiBAY29uc3RydWN0b3JcbiAgICAjIyNcbiAgICBjb25zdHJ1Y3RvcjogKCkgLT5cbiAgICAgICAgc3VwZXIoKVxuXG4gICAgICAgICMjIypcbiAgICAgICAgKiBUaGUgY3VycmVudCB0ZXh0IGRpc3BsYXllZC5cbiAgICAgICAgKiBAcHJvcGVydHkgdGV4dFxuICAgICAgICAqIEB0eXBlIHN0cmluZ1xuICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgIyMjXG4gICAgICAgIEB0ZXh0ID0gXCJcIlxuICAgICAgICBcbiAgICAgICAgQHJlbmRlcmVkTGluZXMgPSBudWxsXG4gICAgICAgIFxuICAgICAgICAjIyMqXG4gICAgICAgICogVGhlIHNwYWNlIGFyb3VuZCB0aGUgdGV4dC5cbiAgICAgICAgKiBAcHJvcGVydHkgcGFkZGluZ1xuICAgICAgICAqIEB0eXBlIHN0cmluZ1xuICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgIyMjXG4gICAgICAgIEBwYWRkaW5nID0gbmV3IHVpLlNwYWNlKDYsIDAsIDYsIDApO1xuICAgICAgICBcbiAgICAgICAgIyMjKlxuICAgICAgICAqIFRoZSBmb250IHVzZWQgZm9yIHRleHQtcmVuZGVyaW5nLlxuICAgICAgICAqIEBwcm9wZXJ0eSBmb250XG4gICAgICAgICogQHR5cGUgc3RyaW5nXG4gICAgICAgICogQHByb3RlY3RlZFxuICAgICAgICAjIyNcbiAgICAgICAgQGZvbnQgPSBuZXcgRm9udChncy5Gb250cy5URVhUKVxuICAgICAgICBcbiAgICAgICAgIyMjKlxuICAgICAgICAqIFN0YW5kYXJkIEZvcm1hdCBTdHJpbmcgd2hpY2ggY2FuIGJlIHVzZWQgaWYgdGhlIHRleHQgcmVwcmVzZW50cyBhIG51bWJlciB2YWx1ZS5cbiAgICAgICAgKiBFeGFtcGxlOiBJZiB0aGUgdGV4dCBpcyBcIjNcIiBhbmQgZm9ybWF0IGlzIFwiJTBkM1wiIHRoZW4gMDAzIGlzIHRoZSBkaXNwbGF5ZWQgdGV4dC5cbiAgICAgICAgKiBAcHJvcGVydHkgZm9ybWF0XG4gICAgICAgICogQHR5cGUgc3RyaW5nXG4gICAgICAgICogQHByb3RlY3RlZFxuICAgICAgICAjIyNcbiAgICAgICAgQGZvcm1hdCA9IG51bGxcbiAgICAgICAgXG4gICAgIyMjKlxuICAgICogRGlzcG9zZXMgdGhlIGNvbXBvbmVudCBhbmQgYml0bWFwLlxuICAgICpcbiAgICAqIEBtZXRob2QgZGlzcG9zZVxuICAgICMjI1xuICAgIGRpc3Bvc2U6IC0+XG4gICAgICAgIGlmIEBvYmplY3QuYml0bWFwP1xuICAgICAgICAgICAgQG9iamVjdC5iaXRtYXAuZGlzcG9zZSgpXG4gICAgICAgICAgICBAb2JqZWN0LmJpdG1hcCA9IG51bGxcbiAgICBcbiAgICAjIyMqXG4gICAgKiBSZWRyYXdzIHRoZSB0ZXh0cyBvbiBnYW1lIG9iamVjdCdzIGJpdG1hcC5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHJlZHJhd1xuICAgICMjI1xuICAgIHJlZHJhdzogLT5cbiAgICAgICAgaWYgQHRleHQ/XG4gICAgICAgICAgICBAb2JqZWN0LmJpdG1hcC5jbGVhcigpXG4gICAgICAgICAgICBAb2JqZWN0LmJpdG1hcC5mb250ID0gQG9iamVjdC5mb250XG4gICAgICAgICAgICB0ZXh0ID0gbGNzKEB0ZXh0KVxuICAgICAgICAgICAgaWYgQGZvcm1hdD9cbiAgICAgICAgICAgICAgICB0ZXh0ID0gc3ByaW50ZihAZm9ybWF0LCB0ZXh0KVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgQG9iamVjdC5mb3JtYXR0aW5nXG4gICAgICAgICAgICAgICAgQHJlbmRlcmVkTGluZXMgPSBAb2JqZWN0LnRleHRSZW5kZXJlci5kcmF3Rm9ybWF0dGVkVGV4dChAcGFkZGluZy5sZWZ0LCBAcGFkZGluZy50b3AsIEBwYWRkaW5nLnJpZ2h0LCBAcGFkZGluZy5ib3R0b20sIHRleHQsIEBvYmplY3Qud29yZFdyYXAgPyB5ZXMpXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgQG9iamVjdC50ZXh0UmVuZGVyZXIuZHJhd1RleHQoQHBhZGRpbmcubGVmdCwgQHBhZGRpbmcudG9wLCBAcGFkZGluZy5yaWdodCwgQHBhZGRpbmcuYm90dG9tLCB0ZXh0KVxuXG4gICAgIyMjKlxuICAgICogVXBkYXRlcyB0aGUgZ2FtZSBvYmplY3QncyA8Yj5kc3RSZWN0PC9iPiBzbyB0aGF0IHRoZSB0ZXh0IGZpdHMgaW4uIFRoYXQgb25seSB3b3Jrc1xuICAgICogaWYgdGhlIGdhbWUgb2JqZWN0J3MgPGI+c2l6ZVRvRml0PC9iPiBwcm9wZXJ0eSBpcyBzZXQuXG4gICAgKlxuICAgICogQG1ldGhvZCByZWZyZXNoU2l6ZVxuICAgICMjI1xuICAgIHJlZnJlc2hTaXplOiAtPlxuICAgICAgICBpZiBub3QgQG9iamVjdC50ZXh0PyAgdGhlbiByZXR1cm5cbiAgICAgICAgXG4gICAgICAgIEB0ZXh0ID0gQG9iamVjdC50ZXh0XG4gICAgICAgIHRleHQgPSBsY3MoQG9iamVjdC50ZXh0KS50b1N0cmluZygpXG4gICAgICAgIFxuICAgICAgICBpZiBAZm9ybWF0P1xuICAgICAgICAgICAgdGV4dCA9IHNwcmludGYoQGZvcm1hdCwgdGV4dClcbiAgICAgICAgICAgIFxuICAgICAgICBpZiBAb2JqZWN0LnNpemVUb0ZpdFxuICAgICAgICAgICAgQG9iamVjdC5mb250ID0gQG9iamVjdC5mb250IHx8IEBmb250XG4gICAgICAgICAgICBpZiBAb2JqZWN0LmZvcm1hdHRpbmdcbiAgICAgICAgICAgICAgICBzaXplID0gQG9iamVjdC50ZXh0UmVuZGVyZXIubWVhc3VyZUZvcm1hdHRlZFRleHQodGV4dCwgQG9iamVjdC53b3JkV3JhcCA/IHllcylcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBzaXplID0gQG9iamVjdC50ZXh0UmVuZGVyZXIubWVhc3VyZVRleHQodGV4dClcbiAgICAgICAgICAgIEByZWZyZXNoV2l0aFNpemUoc2l6ZSlcbiAgICBcbiAgICAjIyMqXG4gICAgKiBVcGRhdGVzIHRoZSBnYW1lIG9iamVjdCdzIDxiPmRzdFJlY3Q8L2I+IHdpdGggdGhlIHNwZWNpZmllZCB0ZXh0IHNpemUuXG4gICAgKlxuICAgICogQHBhcmFtIHtncy5TaXplfSBzaXplIC0gVGhlIHRleHQgc2l6ZSB0byByZXNpemUgdGhlIGdhbWUgb2JqZWN0IGZvci5cbiAgICAqIEBtZXRob2QgcmVmcmVzaFdpdGhTaXplXG4gICAgIyMjXG4gICAgcmVmcmVzaFdpdGhTaXplOiAoc2l6ZSkgLT5cbiAgICAgICAgaWYgIShAb2JqZWN0LnNpemVUb0ZpdC5ob3Jpem9udGFsPykgb3IgQG9iamVjdC5zaXplVG9GaXQuaG9yaXpvbnRhbFxuICAgICAgICAgICAgICAgIEBvYmplY3QuZHN0UmVjdC53aWR0aCA9IHNpemUud2lkdGggKyBAcGFkZGluZy5yaWdodCArIEBwYWRkaW5nLmxlZnRcbiAgICAgICAgaWYgIShAb2JqZWN0LnNpemVUb0ZpdC52ZXJ0aWNhbD8pIG9yIEBvYmplY3Quc2l6ZVRvRml0LnZlcnRpY2FsXG4gICAgICAgICAgICBAb2JqZWN0LmRzdFJlY3QuaGVpZ2h0ID0gc2l6ZS5oZWlnaHQgKyBAcGFkZGluZy5ib3R0b20gKyBAcGFkZGluZy50b3BcbiAgICAgXG4gICAgIyMjKlxuICAgICogUmVjcmVhdGVzIGFuZCBjbGVhcnMgdGhlIGdhbWUgb2JqZWN0J3MgYml0bWFwIGlmIG5lY2Vzc2FyeS5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHJlZnJlc2hCaXRtYXBcbiAgICAjIyNcbiAgICByZWZyZXNoQml0bWFwOiAtPlxuICAgICAgICB3aWR0aCA9IEBvYmplY3QuYml0bWFwPy53aWR0aCB8fCAwXG4gICAgICAgIGhlaWdodCA9IEBvYmplY3QuYml0bWFwPy5oZWlnaHQgfHwgMFxuICAgICAgICBcbiAgICAgICAgaWYoIUBvYmplY3QuYml0bWFwIG9yIHdpZHRoICE9IEBvYmplY3QuZHN0UmVjdC53aWR0aCBvciBoZWlnaHQgIT0gQG9iamVjdC5kc3RSZWN0LmhlaWdodClcbiAgICAgICAgICAgIEBvYmplY3QuYml0bWFwPy5kaXNwb3NlKClcbiAgICAgICAgICAgIEBvYmplY3QuYml0bWFwID0gbmV3IEJpdG1hcChAb2JqZWN0LmRzdFJlY3Qud2lkdGggLCBAb2JqZWN0LmRzdFJlY3QuaGVpZ2h0KVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBAb2JqZWN0LmJpdG1hcC5jbGVhcigpXG4gICAgICAgICAgICBcbiAgICAgICAgQG9iamVjdC5iaXRtYXAuZm9udCA9IEBvYmplY3QuZm9udFxuICAgICAgICAgICAgXG4gICAgIyMjKlxuICAgICogUmVmcmVzaGVzIHRoZSB0ZXh0cyBvbiBnYW1lIG9iamVjdCdzIGJpdG1hcC4gSWYgdGhlIHRleHQgb3IgZm9udCBoYXMgbm90IGJlZW5cbiAgICAqIGNoYW5nZWQsIG5vIHJlZnJlc2ggd2lsbCBoYXBwZW4uXG4gICAgKlxuICAgICogQG1ldGhvZCByZWZyZXNoXG4gICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlIC0gSWYgc2V0IHRvIDxiPnRydWU8L2I+IGl0IHdpbGwgZm9yY2UgcmVkcmF3aW5nIHRoZSB0ZXh0IGV2ZW4gaWYgdGhlXG4gICAgKiB0ZXh0IGFuZCBmb250IGhhcyBub3QgYmVlbiBjaGFuZ2VkLlxuICAgICMjIyAgICAgICAgICAgIFxuICAgIHJlZnJlc2g6IChmb3JjZSkgLT5cbiAgICAgICAgZm9udENoYW5nZSA9ICFAZm9udC5jb21wYXJlKEBvYmplY3QuZm9udClcbiAgICAgICAgaWYgIUBvYmplY3QudGV4dD8gb3IgKCFmb3JjZSBhbmQgQG9iamVjdC50ZXh0ID09IEB0ZXh0IGFuZCAhZm9udENoYW5nZSkgdGhlbiByZXR1cm5cbiAgICAgICAgXG4gICAgICAgIEBmb250LnNldChAb2JqZWN0LmZvbnQpIGlmIGZvbnRDaGFuZ2VcbiAgICAgICAgQHJlZnJlc2hTaXplKClcbiAgICAgICAgQHJlZnJlc2hCaXRtYXAoKVxuICAgICAgICBcbiAgICAgICAgQHNyY1JlY3QgPSBuZXcgUmVjdCgwLCAwLCBAb2JqZWN0LmRzdFJlY3Qud2lkdGggLCBAb2JqZWN0LmRzdFJlY3QuaGVpZ2h0KVxuICAgICAgICBAb2JqZWN0LnNyY1JlY3QgPSBAc3JjUmVjdFxuICAgICAgICBAcmVkcmF3KClcbiAgICBcbiAgICAjIyMqXG4gICAgKiBBY3Rpb24gdG8gYXBwZW5kIGEgc3BlY2lmaWVkIHRleHQuXG4gICAgKlxuICAgICogQG1ldGhvZCBhZGRUZXh0XG4gICAgKiBAcGFyYW0ge09iamVjdH0gc2VuZGVyIC0gVGhlIHNlbmRlciBvZiB0aGUgYWN0aW9uLlxuICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyAtIFRoZSBhY3Rpb24ncyBwYXJhbWV0ZXJzLlxuICAgICMjIyAgXG4gICAgYWRkVGV4dDogKHNlbmRlciwgcGFyYW1zKSAtPlxuICAgICAgICBAb2JqZWN0LnRleHQgKz0gdWkuQ29tcG9uZW50X0Zvcm11bGFIYW5kbGVyLmZpZWxkVmFsdWUoc2VuZGVyLCBwYXJhbXMudGV4dClcbiAgICAgXG4gICAgIyMjKlxuICAgICogVXBkYXRlcyB0aGUgY29tcG9uZW50LiBDaGVja3MgaWYgdGhlIGdhbWUgb2JqZWN0J3MgYml0bWFwIG5lZWRzIGEgcmVmcmVzaFxuICAgICogYW5kIG1heWJlIGRpc3Bvc2VzIHRoZSBiaXRtYXAgaWYgdGhlIGdhbWUgb2JqZWN0J3MgaXMgb3V0IG9mIHRoZVxuICAgICogc2NyZWVuIGFuZCBtZW1vcnkgdXNhZ2UgaXMgdG9vIGhpZ2guXG4gICAgKlxuICAgICogQG1ldGhvZCB1cGRhdGVcbiAgICAjIyMgICAgIFxuICAgIHVwZGF0ZTogLT5cbiAgICAgICAgc3VwZXJcbiAgICAgICAgdmlzaWJsZSA9IEBvYmplY3QudmlzdWFsLnZpc2libGVcbiAgICAgICAgICAgIFxuICAgICAgICBpZiAoIUBvYmplY3QuYml0bWFwIG9yIEBvYmplY3QuYml0bWFwLndpZHRoICE9IEBvYmplY3QuZHN0UmVjdC53aWR0aCBvciBAb2JqZWN0LmJpdG1hcC5oZWlnaHQgIT0gQG9iamVjdC5kc3RSZWN0LmhlaWdodCBvciBsY3MoQG9iamVjdC50ZXh0KT8udG9TdHJpbmcoKSAhPSBsY3MoQHRleHQpKVxuICAgICAgICAgICAgQHJlZnJlc2goKVxuICAgIFxuZ3MuQ29tcG9uZW50X1RleHRCZWhhdmlvciA9IENvbXBvbmVudF9UZXh0QmVoYXZpb3IiXX0=\n//# sourceURL=Component_TextBehavior_7.js"},"summary":["name","type","order"]}

Commits for Nextrek/s2s/data/620201AFKF664A4AABSBECAE71A1610CBF73.json

Diff revisions: vs.
Revision Author Commited Message
1084 MOliva picture MOliva Fri 11 May, 2018 12:41:55 +0000