Enabled adding a context to render, so that dynamic fields can resolve locally (like in a message). Improved dynamic fields identification and resolution. Use of more consts for standard frames. Fix history recording and backtracking.
This commit is contained in:
parent
0214416c4e
commit
2dc348a29c
@ -117,3 +117,5 @@ if (vtx.content && ans.content)
|
|||||||
|
|
||||||
if (errors)
|
if (errors)
|
||||||
exit(1);
|
exit(1);
|
||||||
|
else
|
||||||
|
writeln('= OK');
|
||||||
|
15
load/defs.js
15
load/defs.js
@ -59,6 +59,10 @@ const FRAME_TYPE_EXTERNAL ='x';
|
|||||||
const FRAME_TYPE_RESPONSE ='r';
|
const FRAME_TYPE_RESPONSE ='r';
|
||||||
/* Login frame, enables the user to authenticate to the system, or to a CUG */
|
/* Login frame, enables the user to authenticate to the system, or to a CUG */
|
||||||
const FRAME_TYPE_LOGIN ='l';
|
const FRAME_TYPE_LOGIN ='l';
|
||||||
|
/* Mail template frames - mail templates will have the user's stats for the area passed to render() */
|
||||||
|
const FRAME_TYPE_MAIL_TEMPLATE ='m';
|
||||||
|
/* Frame is a message */
|
||||||
|
const FRAME_TYPE_MESSAGE ='M';
|
||||||
|
|
||||||
/* Disable *# going backwards for the following frames */
|
/* Disable *# going backwards for the following frames */
|
||||||
var NO_HISTORY_FRAMES =['980a','98b','981a','982a','983a','998a'];
|
var NO_HISTORY_FRAMES =['980a','98b','981a','982a','983a','998a'];
|
||||||
@ -74,6 +78,7 @@ const INACTIVE_LOGIN =5*60000;
|
|||||||
|
|
||||||
var SYSTEM_ZONE =516;
|
var SYSTEM_ZONE =516;
|
||||||
|
|
||||||
|
// @todo rename these all to FRAME_*
|
||||||
/* Home Frame */
|
/* Home Frame */
|
||||||
const HOME_FRAME ={frame: 1,index: 'a'};
|
const HOME_FRAME ={frame: 1,index: 'a'};
|
||||||
/* Login Frame */
|
/* Login Frame */
|
||||||
@ -88,8 +93,18 @@ const LOGIN_FAILED_FRAME ={frame: 983,index: 'a'};
|
|||||||
const HOME_FRAME_AUTH ={frame: 98,index: 'b'};
|
const HOME_FRAME_AUTH ={frame: 98,index: 'b'};
|
||||||
/* Home page for initial connection */
|
/* Home page for initial connection */
|
||||||
const HOME_FRAME_CONNECT ={frame: 980,index: 'a'};
|
const HOME_FRAME_CONNECT ={frame: 980,index: 'a'};
|
||||||
|
const FRAME_SYSTEM_ERROR ={frame: 998,index: 'a'};
|
||||||
|
|
||||||
/* Attributes saved/loaded from files */
|
/* Attributes saved/loaded from files */
|
||||||
const SAVED_FRAME_ATTRS =['version','frame','frame_fields','index','owner','cost','content','isPublic','isAccessible','type','key'];
|
const SAVED_FRAME_ATTRS =['version','frame','frame_fields','index','owner','cost','content','isPublic','isAccessible','type','key'];
|
||||||
|
|
||||||
|
/* The page that has our echomail area reading template */
|
||||||
|
var MAIL_TEMPLATE_FRAME ='199a';
|
||||||
|
|
||||||
|
/* The page that has our echomail area summary template */
|
||||||
|
var MAIL_TEMPLATE_AREA_SUMMARY ='198a';
|
||||||
|
|
||||||
|
// The maximum size of embedded dynamic fields in frames
|
||||||
|
var DYNAMIC_FIELD_SIZE_MAX =50;
|
||||||
|
|
||||||
this;
|
this;
|
||||||
|
@ -75,7 +75,7 @@ function FrameAnsi() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Render the frame to the user
|
// Render the frame to the user
|
||||||
this.render=function(withoutHeader) {
|
this.render=function(context,withoutHeader) {
|
||||||
log(LOG_DEBUG,'- ANSI FRAME');
|
log(LOG_DEBUG,'- ANSI FRAME');
|
||||||
owner = base64_decode(this.owner);
|
owner = base64_decode(this.owner);
|
||||||
|
|
||||||
@ -99,7 +99,7 @@ function FrameAnsi() {
|
|||||||
contentgraphic = new Graphic(this.settings.FRAME_WIDTH);
|
contentgraphic = new Graphic(this.settings.FRAME_WIDTH);
|
||||||
contentgraphic.auto_extend = true;
|
contentgraphic.auto_extend = true;
|
||||||
contentgraphic.atcodes = false;
|
contentgraphic.atcodes = false;
|
||||||
contentgraphic.ANSI = this.parse(base64_decode(this.content));
|
contentgraphic.ANSI = this.parse(base64_decode(this.content),context);
|
||||||
|
|
||||||
var contentframe = new Frame(1,2,this.settings.FRAME_WIDTH,this.settings.FRAME_LENGTH,LIGHTGRAY,frame);
|
var contentframe = new Frame(1,2,this.settings.FRAME_WIDTH,this.settings.FRAME_LENGTH,LIGHTGRAY,frame);
|
||||||
contentframe.open();
|
contentframe.open();
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
var MAIL_TEMPLATE_FRAME = '199a';
|
|
||||||
|
|
||||||
// Our frame object
|
// Our frame object
|
||||||
function PageFrame() {
|
function PageFrame() {
|
||||||
'use strict';
|
'use strict';
|
||||||
@ -171,8 +169,7 @@ PageFrame.prototype.load = function(filename) {
|
|||||||
log(LOG_ERROR,'Frame error: '+error);
|
log(LOG_ERROR,'Frame error: '+error);
|
||||||
|
|
||||||
// Load our system error frame.
|
// Load our system error frame.
|
||||||
// @todo this should be a config item
|
this.load(pageStr(FRAME_SYSTEM_ERROR));
|
||||||
this.load('998a');
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -190,11 +187,13 @@ PageFrame.prototype.loadMessage = function(page) {
|
|||||||
this.owner = 1;
|
this.owner = 1;
|
||||||
this.isPublic = true;
|
this.isPublic = true;
|
||||||
this.isAccessible = true;
|
this.isAccessible = true;
|
||||||
this.key = [0,null,null,null,null,null,null,null,null,918];
|
// @todo Keys should map to next/previous/send, etc as indicated in the template frame.
|
||||||
|
this.key = [this.frame.substr(0,7)+'1',null,null,null,null,null,null,null,null,null];
|
||||||
|
this.type = FRAME_TYPE_MESSAGE;
|
||||||
|
|
||||||
// Load our message
|
// Load our message
|
||||||
var ma = new MsgAreas()
|
var ma = new MsgAreas()
|
||||||
var msg = ma.getMessage(page);
|
var msg = ma.getMessage(this.frame);
|
||||||
var msg_header;
|
var msg_header;
|
||||||
|
|
||||||
if (! msg)
|
if (! msg)
|
||||||
@ -215,6 +214,7 @@ PageFrame.prototype.loadMessage = function(page) {
|
|||||||
msg_header += 'SUBJECT: '+msg.subject.substr(0,72)+"\n\r";
|
msg_header += 'SUBJECT: '+msg.subject.substr(0,72)+"\n\r";
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
// @todo change this to use atcode()
|
||||||
msg_header = base64_decode(to.content).replace(/@(.*)@/g,
|
msg_header = base64_decode(to.content).replace(/@(.*)@/g,
|
||||||
function (str, code, offset, s) {
|
function (str, code, offset, s) {
|
||||||
var length = code.split(':')[1];
|
var length = code.split(':')[1];
|
||||||
@ -228,7 +228,7 @@ PageFrame.prototype.loadMessage = function(page) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
log(LOG_DEBUG,'Loaded message: '+msg_header+msg.content);
|
//log(LOG_DEBUG,'Loaded message: '+msg_header+msg.content);
|
||||||
this.content = base64_encode(msg_header+msg.content);
|
this.content = base64_encode(msg_header+msg.content);
|
||||||
|
|
||||||
log(LOG_DEBUG,'Loaded frame: ['+this.frame+']['+this.index+'] ('+this.page+')');
|
log(LOG_DEBUG,'Loaded frame: ['+this.frame+']['+this.index+'] ('+this.page+')');
|
||||||
@ -247,8 +247,16 @@ PageFrame.prototype.loadMessage = function(page) {
|
|||||||
* should apply for that field.
|
* should apply for that field.
|
||||||
*
|
*
|
||||||
* @param text
|
* @param text
|
||||||
|
* @param context
|
||||||
*/
|
*/
|
||||||
PageFrame.prototype.parse = function(text) {
|
PageFrame.prototype.parse = function(text,context) {
|
||||||
|
log(LOG_DEBUG,'Parsing Frame ...');
|
||||||
|
|
||||||
|
if (this.type === FRAME_TYPE_MESSAGE) {
|
||||||
|
log(LOG_DEBUG,'- Not parsing message frame');
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
/** Column
|
/** Column
|
||||||
* @type {number}
|
* @type {number}
|
||||||
*/
|
*/
|
||||||
@ -394,13 +402,16 @@ PageFrame.prototype.parse = function(text) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
// X - dynamic fields, terminated with ESC
|
// X - dynamic fields, terminated with ESC
|
||||||
|
// Dynamic fields are defined with ESC X FIELD;LENGTH;PAD ESC \
|
||||||
|
// @note FIELD & LENGTH are required
|
||||||
|
// @note Dynamic field is can only be DYNAMIC_FIELD_SIZE_MAX chars in size
|
||||||
case 'X':
|
case 'X':
|
||||||
//log(LOG_DEBUG,'PU ['+r+'x'+c+'] '+advance);
|
//log(LOG_DEBUG,'DF ['+r+'x'+c+'] '+advance);
|
||||||
advance++;
|
advance++;
|
||||||
|
|
||||||
// Find our end ST param in the next 50 chars
|
// Find our end ST param in the next DYNAMIC_FIELD_SIZE_MAX chars
|
||||||
matches = text.substr(p+advance,50).match(/(([a-z]+;[0-9]+)([;]?.+)?)\x1b\\/);
|
matches = text.substr(p+advance,DYNAMIC_FIELD_SIZE_MAX).match(/(([a-zA-Z._^;]+[0-9]?;-?[0-9^;]+)([;]?[^;]+)?)\x1b\\/);
|
||||||
//log(LOG_DEBUG,'PU ['+r+'x'+c+'] ADVANCE: '+advance+', MATCHES: '+JSON.stringify(matches)+', LENGTH: '+(matches ? matches[0].length : 0)+', STRING: '+text.substr(p+advance,50));
|
//log(LOG_DEBUG,'- DF ['+r+'x'+c+'] ADVANCE: '+advance+', MATCHES: '+JSON.stringify(matches)+', LENGTH: '+(matches ? matches[0].length : 0)+', STRING: '+text.substr(p+advance,50));
|
||||||
|
|
||||||
if (! matches) {
|
if (! matches) {
|
||||||
chars += nextbyte;
|
chars += nextbyte;
|
||||||
@ -410,14 +421,13 @@ PageFrame.prototype.parse = function(text) {
|
|||||||
|
|
||||||
advance += matches[0].length-1;
|
advance += matches[0].length-1;
|
||||||
|
|
||||||
var pu = matches[0].substr(0,matches[0].length-2).split(';');
|
var df = matches[0].substr(0,matches[0].length-2).split(';');
|
||||||
//log(LOG_DEBUG,'PU ['+r+'x'+c+'] ADVANCE: '+advance+', PU: '+pu);
|
//log(LOG_DEBUG,'- DF ['+r+'x'+c+'] ADVANCE: '+advance+', DF: '+df);
|
||||||
|
|
||||||
chars = renderfield(pu[0],pu[1]);
|
log(LOG_DEBUG,'- DF found at ['+r+'x'+(c-1)+'], Field: '+df[0]+', Length: '+df[1]+', Attrs: '+JSON.stringify({i:i,f:f,b:b}));
|
||||||
|
chars = atcode(df[0],df[1],df[2],context);
|
||||||
byte = '';
|
byte = '';
|
||||||
|
|
||||||
log(LOG_DEBUG,'PU Field found at ['+r+'x'+(c-1)+'], Field: '+pu[0]+', Length: '+pu[1]+', Attrs: '+JSON.stringify({i:i,f:f,b:b}));
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// _ - has our fields that take input
|
// _ - has our fields that take input
|
||||||
@ -528,12 +538,5 @@ PageFrame.prototype.parse = function(text) {
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert any atcodes
|
|
||||||
output = output.replace(/@(.*)@/g,
|
|
||||||
function (str, code, offset, s) {
|
|
||||||
return bbs.atcode(code);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
return output;
|
return output;
|
||||||
};
|
};
|
||||||
|
@ -104,6 +104,58 @@ function ans2bin(ansi,frame) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Dynamic Field Processing
|
||||||
|
// @note bbs.atcodes() cannot process modifiers, so this function is a replacement.
|
||||||
|
function atcode(field,length,pad,context) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
length = length ? length : field.length;
|
||||||
|
pad = pad ? pad : ' ';
|
||||||
|
var result = '';
|
||||||
|
|
||||||
|
switch(field) {
|
||||||
|
// Get the ECHOAREA FTN AREA_TAG
|
||||||
|
case 'areatag':
|
||||||
|
if (typeof context !== 'object') {
|
||||||
|
log(LOG_ERROR,'Unable to render ['+field+'], no context provided');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = context.msgbase.cfg.area_tag;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Get the ECHOAREA Description
|
||||||
|
case 'areadesc':
|
||||||
|
if (typeof context !== 'object') {
|
||||||
|
log(LOG_ERROR,'Unable to render ['+field+'], no context provided');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = context.msgbase.cfg.description;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'nodeid':
|
||||||
|
result = getNodeID();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
result = bbs.atcode(field);
|
||||||
|
|
||||||
|
if (result === null)
|
||||||
|
result = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
log(LOG_DEBUG,' - result length ['+result.length+'] desired ('+length+')');
|
||||||
|
if (result.length < Math.abs(length))
|
||||||
|
result = (length < 0) ? padright(result,Math.abs(length),pad) : padleft(result,length,pad);
|
||||||
|
else if (result.length > Math.abs(length))
|
||||||
|
result = result.substr(0,Math.abs(length));
|
||||||
|
|
||||||
|
log(LOG_DEBUG,'- ATCODE ['+field+'] ('+length+'|"'+pad+'") returns ['+result+']');
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find a message base by code
|
* Find a message base by code
|
||||||
*
|
*
|
||||||
@ -164,7 +216,7 @@ function getNodeID() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return pad(matches[0],3)+pad(matches[1],3)+pad(bbs.node_num,2);
|
return padleft(matches[0],3,'0')+padleft(matches[1],3,'0')+padleft(bbs.node_num,2,'0');
|
||||||
}
|
}
|
||||||
|
|
||||||
function getPageOwners() {
|
function getPageOwners() {
|
||||||
@ -228,11 +280,18 @@ function msgBaseImport(msgbase,page,text) {
|
|||||||
return msgbase.save_msg(hdr, body);
|
return msgbase.save_msg(hdr, body);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pad a number with zeros
|
// Right Pad a string with char c
|
||||||
function pad(n, width, z) {
|
function padright(n,width,c) {
|
||||||
z = z || '0';
|
c = c || '0';
|
||||||
n = n + '';
|
n = n + '';
|
||||||
return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
|
return n.length >= width ? n : new Array(width - n.length + 1).join(c) + n;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Left Pad a string with char c
|
||||||
|
function padleft(n,width,c) {
|
||||||
|
c = c || '0';
|
||||||
|
n = n + '';
|
||||||
|
return n.length >= width ? n : n+new Array(width - n.length + 1).join(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -314,20 +373,6 @@ function pageEditor(page) {
|
|||||||
return pageditor;
|
return pageditor;
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderfield(field,length) {
|
|
||||||
switch (field) {
|
|
||||||
case 'nodeid':
|
|
||||||
result = getNodeID();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result.length < length)
|
|
||||||
result += ' '.repeat(length-result.length);
|
|
||||||
else if (result.length > length)
|
|
||||||
result = result.substr(0,length);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function returns a list of zones used by this system.
|
* This function returns a list of zones used by this system.
|
||||||
*/
|
*/
|
||||||
|
@ -230,17 +230,30 @@ MsgArea.prototype.tag_msgs = function() {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
MsgAreas.prototype.getMessage = function(page) {
|
MsgAreas.prototype.getArea = function(area) {
|
||||||
if (page === undefined)
|
log(LOG_DEBUG,'- AREA:'+JSON.stringify(area));
|
||||||
|
if (area === undefined)
|
||||||
return undefined;
|
return undefined;
|
||||||
|
|
||||||
var zone = page.substr(0,4);
|
var zone = (''+area).substr(1,4);
|
||||||
var echo = page.substr(4,2);
|
var echo = (''+area).substr(5,2);
|
||||||
var page = page.substr(6);
|
log(LOG_DEBUG,' - zone:'+JSON.stringify(zone));
|
||||||
|
log(LOG_DEBUG,' - echo:'+JSON.stringify(echo));
|
||||||
|
|
||||||
area = this.areas.filter(function(x) {
|
return this.areas.filter(function(x) {
|
||||||
return x.zone_id === zone && x.area_id === echo;
|
return x.zone_id === zone && x.area_id === echo;
|
||||||
})[0]
|
})[0]
|
||||||
|
}
|
||||||
return area ? area.getMessage(page) : undefined;
|
|
||||||
|
MsgAreas.prototype.getMessage = function(page) {
|
||||||
|
var area = this.getArea(page);
|
||||||
|
log(LOG_DEBUG,' - msg:'+JSON.stringify(page.substr(7,4)));
|
||||||
|
|
||||||
|
return area ? area.getMessage(page.substr(7,4)) : undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
MsgAreas.prototype.getUserStats = function(page) {
|
||||||
|
var area = this.getArea(page);
|
||||||
|
|
||||||
|
return area ? msg_area.grp_list[area.msgbase.cfg.grp_number].sub_list[msg_area.sub[area.msgbase.cfg.code].index] : undefined;
|
||||||
}
|
}
|
||||||
|
87
main.js
87
main.js
@ -880,7 +880,8 @@ while(bbs.online) {
|
|||||||
|
|
||||||
// GO Backwards
|
// GO Backwards
|
||||||
case ACTION_BACKUP:
|
case ACTION_BACKUP:
|
||||||
// Do we have anywhere to go, drop the current page from the history.
|
log(LOG_DEBUG,'- ACTION_BACKUP: history size - '+history.length+' with ['+history.join('|')+']');
|
||||||
|
// Do we have anywhere to go, drop the current page from the history
|
||||||
if (history.length > 1)
|
if (history.length > 1)
|
||||||
history.pop();
|
history.pop();
|
||||||
|
|
||||||
@ -888,7 +889,7 @@ while(bbs.online) {
|
|||||||
|
|
||||||
next_page = (history.length > 0) ? history[history.length-1] : null;
|
next_page = (history.length > 0) ? history[history.length-1] : null;
|
||||||
|
|
||||||
log(LOG_DEBUG,'- ACTION_BACKUP: Backing up to ['+(next_page ? pageStr(next_page) : '')+'] current ['+fo.page+']');
|
log(LOG_DEBUG,'- ACTION_BACKUP: Backing up to ['+JSON.stringify(next_page)+'] current ['+fo.page+']');
|
||||||
|
|
||||||
// If there is no next page, we'll ignore the request.
|
// If there is no next page, we'll ignore the request.
|
||||||
if (! next_page || (pageStr(next_page) === fo.page)) {
|
if (! next_page || (pageStr(next_page) === fo.page)) {
|
||||||
@ -902,22 +903,55 @@ while(bbs.online) {
|
|||||||
var current = null;
|
var current = null;
|
||||||
|
|
||||||
// For logged in users, we'll see if this is a mail page.
|
// For logged in users, we'll see if this is a mail page.
|
||||||
// @todo consider how we do mail security.
|
if (user.number) {
|
||||||
// 1zzzzEEnnnn
|
// @todo consider how we do mail security.
|
||||||
if (user.number && /^1[0-9]{10}/.test(next_page.frame)) {
|
|
||||||
log(LOG_DEBUG,'- ACTION_GOTO - load message: ['+next_page.frame+']');
|
|
||||||
|
|
||||||
require('ansitex/load/control-echomail.js','CONTROL_ECHOMAIL');
|
// Echoarea mail summary
|
||||||
control.push(new echomail((''+next_page.frame).substr(1)));
|
if (/^1[0-9]{6}1$/.test(next_page.frame)) {
|
||||||
action = false;
|
log(LOG_DEBUG,'- ACTION_GOTO - load echoarea summary: ['+next_page.frame+']');
|
||||||
log(LOG_DEBUG,'- ACTION_GOTO - control message: ['+JSON.stringify(control[control.length-1])+'] ('+control.length+')');
|
|
||||||
|
|
||||||
if (! control[control.length-1].ready()) {
|
to = viewdata ? new FrameViewdata() : new FrameAnsi();
|
||||||
control.pop();
|
// @todo look for a template in the area or group first
|
||||||
fo.sendBaseline('ERR_ROUTE',false);
|
to.load(MAIL_TEMPLATE_AREA_SUMMARY);
|
||||||
mode = action = false;
|
|
||||||
|
// If the template page doesnt exist
|
||||||
|
if (! to.content) {
|
||||||
|
fo.sendBaseline('ERR_ROUTE',false);
|
||||||
|
mode = action = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
current = fo;
|
||||||
|
var ma = new MsgAreas();
|
||||||
|
fo = viewdata ? new FrameViewdata() : new FrameAnsi();
|
||||||
|
fo.frame = next_page.frame;
|
||||||
|
fo.index = next_page.index;
|
||||||
|
fo.content = to.content;
|
||||||
|
fo.isPublic = true;
|
||||||
|
fo.isAccessible = to.isAccessible;
|
||||||
|
fo.owner = to.owner;
|
||||||
|
fo.type = to.type;
|
||||||
|
|
||||||
|
log(LOG_DEBUG,'USER:'+JSON.stringify(ma.getUserStats((''+next_page.frame).substr(1,6)),null,"\r"));
|
||||||
|
next_page = null;
|
||||||
|
|
||||||
|
// 1zzzzEEnnnn - get a message
|
||||||
|
} else if (/^1[0-9]{10}/.test(next_page.frame)) {
|
||||||
|
log(LOG_DEBUG,'- ACTION_GOTO - load message: ['+next_page.frame+']');
|
||||||
|
|
||||||
|
require('ansitex/load/control-echomail.js','CONTROL_ECHOMAIL');
|
||||||
|
control.push(new echomail((''+next_page.frame).substr(1)));
|
||||||
|
action = false;
|
||||||
|
log(LOG_DEBUG,'- ACTION_GOTO - control message: ['+JSON.stringify(control[control.length-1])+'] ('+control.length+')');
|
||||||
|
|
||||||
|
if (! control[control.length-1].ready()) {
|
||||||
|
control.pop();
|
||||||
|
fo.sendBaseline('ERR_ROUTE',false);
|
||||||
|
mode = action = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
next_page = null;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (next_page !== null) {
|
if (next_page !== null) {
|
||||||
@ -937,6 +971,8 @@ while(bbs.online) {
|
|||||||
mode = action = false;
|
mode = action = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
next_page = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the user has access to the frame
|
// If the user has access to the frame
|
||||||
@ -959,16 +995,14 @@ while(bbs.online) {
|
|||||||
log(LOG_DEBUG,'- ACTION_GOTO: next_page ['+JSON.stringify(next_page)+'] last history ['+JSON.stringify(history[history.length-1])+']');
|
log(LOG_DEBUG,'- ACTION_GOTO: next_page ['+JSON.stringify(next_page)+'] last history ['+JSON.stringify(history[history.length-1])+']');
|
||||||
|
|
||||||
// Record our history
|
// Record our history
|
||||||
if (next_page && (! history.length || (pageStr(history[history.length-1]) !== pageStr(next_page))) && (fo.type !== FRAME_TYPE_LOGIN)) {
|
if ((! history.length || (pageStr(history[history.length-1]) !== fo.page)) && (fo.type !== FRAME_TYPE_LOGIN)) {
|
||||||
// Ignore the login frames
|
// Ignore the login frames
|
||||||
if (NO_HISTORY_FRAMES.indexOf(pageStr(next_page)) === -1) {
|
if (NO_HISTORY_FRAMES.indexOf(fo.page) === -1) {
|
||||||
history.push(next_page);
|
history.push({frame:fo.frame,index:fo.index});
|
||||||
log(LOG_DEBUG,'- ACTION_GOTO: Added to history ['+(next_page ? pageStr(next_page) : '')+'] now ['+history.length+']');
|
log(LOG_DEBUG,'- ACTION_GOTO: Added to history ['+fo.page+'] now ['+history.length+']');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
next_page = null;
|
|
||||||
|
|
||||||
// Load frame
|
// Load frame
|
||||||
case ACTION_RELOAD:
|
case ACTION_RELOAD:
|
||||||
log(LOG_DEBUG,'- ACTION_RELOAD: ['+(next_page ? pageStr(next_page) : '')+']');
|
log(LOG_DEBUG,'- ACTION_RELOAD: ['+(next_page ? pageStr(next_page) : '')+']');
|
||||||
@ -983,6 +1017,17 @@ while(bbs.online) {
|
|||||||
bbs.node_action=NODE_MAIN;
|
bbs.node_action=NODE_MAIN;
|
||||||
|
|
||||||
switch(fo.type) {
|
switch(fo.type) {
|
||||||
|
// Terminate frame
|
||||||
|
case FRAME_TYPE_MAIL_TEMPLATE:
|
||||||
|
log(LOG_DEBUG,'- MAIL_TEMPLATE: ['+fo.frame+']');
|
||||||
|
//log(LOG_DEBUG,' - '+JSON.stringify(ma.getArea(fo.frame)));
|
||||||
|
fo.render(ma.getArea(fo.frame));
|
||||||
|
mode = false;
|
||||||
|
action = false;
|
||||||
|
ma = undefined;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
// Terminate frame
|
// Terminate frame
|
||||||
case FRAME_TYPE_TERMINATE:
|
case FRAME_TYPE_TERMINATE:
|
||||||
fo.render();
|
fo.render();
|
||||||
|
@ -1 +1 @@
|
|||||||
{"version":1,"frame":98,"index":"a","owner":9,"cost":0,"content":"G1swbRtbNzFDG1sxOzMybRtYbm9kZWlkOzgbXBtbMG0NChtbNTVDG1sxbUBEQVRFVElNRUAbWzBtDQobWzIyQxtbMW3aIL/Cv7Pav9q/2sK/wr8gwy3avxtbMG0NChtbMjJDs7Ozw9mzsyCzs7Mgs8PZILMgs7MNChtbMjJDG1sxOzMwbcDB2cHZwMDZwNnAINnB2SDA2cDZIPr6+htbMG0NChtbMjJDG1sxOzMwbcTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExBtbMG0NChtbMjNDG1sxOzMxbdzcxNwbWzM3bSAbWzMybdzcxNwbWzM3bSAbWzM0bdzcxNwbWzM3bSAbWzMzbdzcG1swbSAbWzMwOzQ3bSDc3CAgINzcxNwg3Nwg3CAbWzM3OzQwbQ0KG1syM0MbWzE7MzFt3NzEsRtbMzdtIBtbMzJtsrEbWzM3bSAbWzMybbEbWzM3bSAbWzM0bd/fxNwbWzM3bSAbWzMzbdzcG1swbSAbWzMwOzQ3bSCyscQgILKxxN8g39/C3yAbWzM3OzQwbQ0KG1syM0MbWzE7MzFtsbAbWzBtIBtbMTszMW2wG1swbSAbWzE7MzJtsbAbWzBtIBtbMTszMm2wG1swbSAbWzE7MzRtsbAbWzBtIBtbMTszNG2wG1swbSAbWzE7MzNtsbAbWzBtIBtbMzA7NDdtILGwILAgsbAgsCCxsCCwIBtbMzc7NDBtDQobWzIzQxtbMTszMW3f38TfG1swbSAbWzE7MzJt398bWzBtIBtbMTszMm3fG1swbSAbWzE7MzRt39/E3xtbMG0gG1sxOzMzbd/fG1swbSAbWzMwOzQ3bSDf38TfIN/fxN8g398g3yAbWzM3OzQwbQ0KG1syMkMbWzE7MzBtxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEG1swbQ0KG1s0QxtbMW0uICAgICAuICAgG1szMG2zG1swbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBtbMTszMG2zG1swbQ0KG1syQxtbMW3av7/Cv9q/IL/avxtbMG0gG1sxOzMwbbMbWzBtIBtbMTszMW1VU0VSOhtbMG0gG1sxbRtfVVNFUjsyNXQ7+RtcG1swbSAgICAgICAgICAgICAgICAbWzE7MzBtsxtbMG0NChtbMkPAv7Ozs7OzILOzsyAbWzE7MzBtsxtbMG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAbWzE7MzBtsxtbMG0NChtbMkMbWzE7MzBtwNnZwbTZ2RtbMzdtIBtbMzBt2dnZG1szN20gG1szMG2zG1swbSAbWzE7MzFtUEFTUzobWzBtIBtbMW0bX1BBU1M7NDBwO/kbXBtbMG0gG1sxOzMwbbMbWzBtDQobWzVDG1sxOzMwbcTZG1swbSAgICAgICAbWzE7MzBtsxtbMG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAbWzE7MzBtsxtbMG0NCg0KDQoNCg0KG1sxM0MbWzE7MzBtVG8gcmVnaXN0ZXIgYW4gYWNjb3VudCBlbnRlchtbMG0gG1sxbU5FVxtbMG0gG1sxOzMwbWZvciB0aGUgdXNlciBuYW1lG1swbQ0KG1sxNkMbWzE7MzBtVXNlG1swbSAbWzE7MzJtKiobWzBtIBtbMTszMG10byBjbGVhciB5b3VyIGlucHV0G1swbSAbWzE7MzJtKjAwG1swbSAbWzE7MzBtdG8gc3RhcnQgYWdhaW4bWzBtDQo=","isPublic":1,"isAccessible":1,"type":"l","key":[null,"login",null,null,null,null,null,null,null,null],"date":"2020-07-08T05:17:35.174Z"}
|
{"version":1,"frame":98,"index":"a","owner":9,"cost":0,"content":"G1swbRtbNzFDG1sxOzMybRtYbm9kZWlkOzgbXBtbMG0NChtbNTVDG1sxbRtYREFURVRJTUU7MjQbXBtbMG0NChtbMjJDG1sxbdogv8K/s9q/2r/awr/CvyDDLdq/G1swbQ0KG1syMkOzs7PD2bOzILOzsyCzw9kgsyCzsw0KG1syMkMbWzE7MzBtwMHZwdnAwNnA2cAg2cHZIMDZwNkg+vr6G1swbQ0KG1syMkMbWzE7MzBtxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEG1swbQ0KG1syM0MbWzE7MzFt3NzE3BtbMzdtIBtbMzJt3NzE3BtbMzdtIBtbMzRt3NzE3BtbMzdtIBtbMzNt3NwbWzBtIBtbMzA7NDdtINzcICAg3NzE3CDc3CDcIBtbMzc7NDBtDQobWzIzQxtbMTszMW3c3MSxG1szN20gG1szMm2ysRtbMzdtIBtbMzJtsRtbMzdtIBtbMzRt39/E3BtbMzdtIBtbMzNt3NwbWzBtIBtbMzA7NDdtILKxxCAgsrHE3yDf38LfIBtbMzc7NDBtDQobWzIzQxtbMTszMW2xsBtbMG0gG1sxOzMxbbAbWzBtIBtbMTszMm2xsBtbMG0gG1sxOzMybbAbWzBtIBtbMTszNG2xsBtbMG0gG1sxOzM0bbAbWzBtIBtbMTszM22xsBtbMG0gG1szMDs0N20gsbAgsCCxsCCwILGwILAgG1szNzs0MG0NChtbMjNDG1sxOzMxbd/fxN8bWzBtIBtbMTszMm3f3xtbMG0gG1sxOzMybd8bWzBtIBtbMTszNG3f38TfG1swbSAbWzE7MzNt398bWzBtIBtbMzA7NDdtIN/fxN8g39/E3yDf3yDfIBtbMzc7NDBtDQobWzIyQxtbMTszMG3ExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQbWzBtDQobWzRDG1sxbS4gICAgIC4gICAbWzMwbbMbWzBtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgG1sxOzMwbbMbWzBtDQobWzJDG1sxbdq/v8K/2r8gv9q/G1swbSAbWzE7MzBtsxtbMG0gG1sxOzMxbVVTRVI6G1swbSAbWzFtG19VU0VSOzI1dDv5G1wbWzBtICAgICAgICAgICAgICAgIBtbMTszMG2zG1swbQ0KG1syQ8C/s7Ozs7Mgs7OzIBtbMTszMG2zG1swbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBtbMTszMG2zG1swbQ0KG1syQxtbMTszMG3A2dnBtNnZG1szN20gG1szMG3Z2dkbWzM3bSAbWzMwbbMbWzBtIBtbMTszMW1QQVNTOhtbMG0gG1sxbRtfUEFTUzs0MHA7+RtcG1swbSAbWzE7MzBtsxtbMG0NChtbNUMbWzE7MzBtxNkbWzBtICAgICAgIBtbMTszMG2zG1swbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBtbMTszMG2zG1swbQ0KDQoNCg0KDQobWzEzQxtbMTszMG1UbyByZWdpc3RlciBhbiBhY2NvdW50IGVudGVyG1swbSAbWzFtTkVXG1swbSAbWzE7MzBtZm9yIHRoZSB1c2VyIG5hbWUbWzBtDQobWzE2QxtbMTszMG1Vc2UbWzBtIBtbMTszMm0qKhtbMG0gG1sxOzMwbXRvIGNsZWFyIHlvdXIgaW5wdXQbWzBtIBtbMTszMm0qMDAbWzBtIBtbMTszMG10byBzdGFydCBhZ2FpbhtbMG0NCg==","isPublic":1,"isAccessible":1,"type":"l","key":[null,"login",null,null,null,null,null,null,null,null],"date":"2020-07-08T05:17:35.174Z"}
|
||||||
|
@ -1 +1 @@
|
|||||||
{"version":1,"frame":98,"index":"b","owner":9,"cost":0,"content":"G1swbRtbMTszMG3ExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQbWzBtDQogG1sxOzMxbdzcxNwbWzM3bSAbWzMybdzcxNwbWzM3bSAbWzM0bdzcxNwbWzM3bSAbWzMzbdzcG1swbSAbWzMwOzQ3bSDc3CAgINzcxNwg3Nwg3CAbWzM3OzQwbSAgIBtbMW3aIL/Cv7Pav9q/2sK/wr8bWzBtICAgICAgICAgICAbWzE7MzBtQERBVEVUSU1FfEwxNUAbWzBtDQogG1sxOzMxbdzcxLEbWzM3bSAbWzMybbKxG1szN20gG1szMm2xG1szN20gG1szNG3f38TcG1szN20gG1szM23c3BtbMG0gG1szMDs0N20gsrHEICCyscTfIN/fwt8gG1szNzs0MG0gICCzs7PD2bOzILOzsyCzw9kgICAgICAgICAgICAgICAgICAbWzE7MzBtQFRJTUV8TDhAG1swbQ0KIBtbMTszMW2xsBtbMG0gG1sxOzMxbbAbWzBtIBtbMTszMm2xsBtbMG0gG1sxOzMybbAbWzBtIBtbMTszNG2xsBtbMG0gG1sxOzM0bbAbWzBtIBtbMTszM22xsBtbMG0gG1szMDs0N20gsbAgsCCxsCCwILGwILAgG1szNzs0MG0gICAbWzE7MzBtwMHZwdnAwNnA2cAg2cHZG1swbQ0KIBtbMTszMW3f38TfG1swbSAbWzE7MzJt398bWzBtIBtbMTszMm3fG1swbSAbWzE7MzRt39/E3xtbMG0gG1sxOzMzbd/fG1swbSAbWzMwOzQ3bSDf38TfIN/fxN8g398g3yAbWzM3OzQwbQ0KG1sxOzMwbcTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExBtbMG0bWzI0QxtbMTszMDs0MW3fG1szNzs0MG0gG1szMDs0MW3fG1szNzs0MG0gG1szMDs0MW3fG1s0MG3fG1s0MW3fG1szNzs0MG0gG1szMDs0MW3fG1s0MG3fG1szMW3cG1szN20gG1szMDs0MW3fG1s0MG3f3xtbMzdtIBtbMzA7NDFt3xtbNDBt3xtbNDFt3xtbMG0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgG1sxOzVtIBtbMDsxOzMxOzQxbdwbWzM3OzQwbSAbWzMxOzQxbdwbWzM3OzQwbSAbWzMxOzQxbdwbWzM3OzQwbSAbWzMxOzQxbdwbWzM3OzQwbSAbWzMxOzQxbdwbWzM3OzQwbSAbWzMxOzQxbdwbWzM3OzQwbSAbWzMxOzQxbdwbWzQwbd8gIBtbNDFt3BtbNDBt39wbWzBtDQogV2VsY29tZSAbWzFtQE1FTU8yLUwyMEAbWzA7MzBtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBtbMTszN23f398g3yDfIN/fICDf398g3yDfG1swbQ0KIFlvdSd2ZSByZWFjaGVkIBtbMTszMW1BG1szMm1OG1szNG1TG1szM21JG1swOzMwOzQ3bXRleBtbMzc7NDBtIG9uICAgICAgICAbWzE7MzA7NDFt3xtbNDBt398bWzM3bSAbWzMwOzQxbd8bWzQwbd8bWzQxbd8bWzM3OzQwbSAbWzMwOzQxbd8bWzQwbd8bWzQxbd8bWzM3OzQwbSAbWzMwOzQxbd8bWzQwbd/fG1szN20gG1szMG3f3xtbNDFt3xtbMzc7NDBtIBtbMzA7NDFt3xtbNDBt3xtbNDFt3xtbMzc7NDBtIBtbMzA7NDFt3xtbMzc7NDBtIBtbMzA7NDFt3xtbMzc7NDBtIBtbMzA7NDFt3xtbNDBt398bWzM3bSAbWzMwbd/fG1s0MW3fG1szNzs0MG0gG1szMG3fG1szN20gG1szMDs0MW3fG1s0MG3fG1s0MW3fG1szNzs0MG0gG1szMDs0MW3fG1s0MG3fG1s0MW3fG1swbQ0KIG5vZGUgG1sxbRtYbm9kZWlkOzgbXBtbMG0uICAgICAgICAgICAgICAgICAgIBtbMTszMTs0MW3cG1szNzs0MG0gICAbWzMxOzQxbdwbWzM3OzQwbSAbWzMxOzQxbdwbWzM3OzQwbSAbWzMxOzQxbdwbWzM3OzQwbSAbWzMxOzQxbdwbWzM3OzQwbSAbWzMxbd/fG1s0MW3cG1szNzs0MG0gICAbWzMxOzQxbdwbWzM3OzQwbSAbWzMxOzQxbdwbWzQwbd/cG1szN20gG1szMTs0MW3cG1szNzs0MG0gG1szMTs0MW3cG1szNzs0MG0gG1szMTs0MW3cG1swbSAgICAgG1sxOzMxOzQxbdwbWzM3OzQwbSAbWzMxOzQxbdwbWzM3OzQwbSAbWzMxOzQxbdwbWzQwbSAbWzQxbdwbWzM3OzQwbSAbWzMxOzQxbdwbWzM3OzQwbSAbWzMxOzQxbdwbWzBtDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgG1sxbd/f3yDf398g3yDfIN/f3yAgIN8g3yDfIN/f3yDf398gICDfIN8g39/fIN8g3xtbMG0NCiBUaGVyZSBhcmUgG1sxbUBPTi1aMkAbWzBtIG90aGVycyBvbmxpbmUgYXMgICAgG1sxOzMxbVBsZWFzZSBiZSBwYXRpZW50IHdoaWxlIHdlG1swbQ0KIHdlbGwgYW5kIBtbMW0wMBtbMG0gbmV3IHVzZXJzIHRvZGF5LiAgICAgICAgICAgICAgICAgICAgG1sxOzMxbWlubm92YXRlIGFuZCBpcm9uIG91dCB0aGUgYnVncxtbMG0NCg0KIFlvdSBoYXZlIBtbMW1AQllURVNMRUZUQBtbMG0gY3JlZGl0cyBsZWZ0DQogYW5kIBtbMW1ATUFJTFdAIBtbMG1tZXNzYWdlcyBpbiB5b3VyIG1haWxib3guDQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAbWzFtUHJlc3MbWzBtIBtbMTs1OzMybTAbWzA7MTszM20gG1szN21NYWluIE1lbnUbWzBtDQoNCg==","isPublic":0,"isAccessible":1,"type":"i","key":[1,null,null,null,null,null,null,null,null,null],"date":"2020-07-08T01:30:48.608Z"}
|
{"version":1,"frame":98,"index":"b","owner":9,"cost":0,"content":"G1swbRtbMTszMG3ExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQbWzBtDQogG1sxOzMxbdzcxNwbWzM3bSAbWzMybdzcxNwbWzM3bSAbWzM0bdzcxNwbWzM3bSAbWzMzbdzcG1swbSAbWzMwOzQ3bSDc3CAgINzcxNwg3Nwg3CAbWzM3OzQwbSAgIBtbMW3aIL/Cv7Pav9q/2sK/wr8bWzBtICAgICAgICAgICAbWzE7MzBtG1hEQVRFVElNRTsxNRtcG1swbQ0KIBtbMTszMW3c3MSxG1szN20gG1szMm2ysRtbMzdtIBtbMzJtsRtbMzdtIBtbMzRt39/E3BtbMzdtIBtbMzNt3NwbWzBtIBtbMzA7NDdtILKxxCAgsrHE3yDf38LfIBtbMzc7NDBtICAgs7Ozw9mzsyCzs7Mgs8PZICAgICAgICAgICAgICAgICAgG1sxOzMwbRtYVElNRTs4G1wbWzBtDQogG1sxOzMxbbGwG1swbSAbWzE7MzFtsBtbMG0gG1sxOzMybbGwG1swbSAbWzE7MzJtsBtbMG0gG1sxOzM0bbGwG1swbSAbWzE7MzRtsBtbMG0gG1sxOzMzbbGwG1swbSAbWzMwOzQ3bSCxsCCwILGwILAgsbAgsCAbWzM3OzQwbSAgIBtbMTszMG3AwdnB2cDA2cDZwCDZwdkbWzBtDQogG1sxOzMxbd/fxN8bWzBtIBtbMTszMm3f3xtbMG0gG1sxOzMybd8bWzBtIBtbMTszNG3f38TfG1swbSAbWzE7MzNt398bWzBtIBtbMzA7NDdtIN/fxN8g39/E3yDf3yDfIBtbMzc7NDBtDQobWzE7MzBtxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEG1swbRtbMjRDG1sxOzMwOzQxbd8bWzM3OzQwbSAbWzMwOzQxbd8bWzM3OzQwbSAbWzMwOzQxbd8bWzQwbd8bWzQxbd8bWzM3OzQwbSAbWzMwOzQxbd8bWzQwbd8bWzMxbdwbWzM3bSAbWzMwOzQxbd8bWzQwbd/fG1szN20gG1szMDs0MW3fG1s0MG3fG1s0MW3fG1swbQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAbWzE7NW0gG1swOzE7MzE7NDFt3BtbMzc7NDBtIBtbMzE7NDFt3BtbMzc7NDBtIBtbMzE7NDFt3BtbMzc7NDBtIBtbMzE7NDFt3BtbMzc7NDBtIBtbMzE7NDFt3BtbMzc7NDBtIBtbMzE7NDFt3BtbMzc7NDBtIBtbMzE7NDFt3BtbNDBt3yAgG1s0MW3cG1s0MG3f3BtbMG0NCiBXZWxjb21lIBtbMW0bWFJFQUxOQU1FOzIwG1wbWzA7MzBtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBtbMTszN23f398g3yDfIN/fICDf398g3yDfG1swbQ0KIFlvdSd2ZSByZWFjaGVkIBtbMTszMW1BG1szMm1OG1szNG1TG1szM21JG1swOzMwOzQ3bXRleBtbMzc7NDBtIG9uICAgICAgICAbWzE7MzA7NDFt3xtbNDBt398bWzM3bSAbWzMwOzQxbd8bWzQwbd8bWzQxbd8bWzM3OzQwbSAbWzMwOzQxbd8bWzQwbd8bWzQxbd8bWzM3OzQwbSAbWzMwOzQxbd8bWzQwbd/fG1szN20gG1szMG3f3xtbNDFt3xtbMzc7NDBtIBtbMzA7NDFt3xtbNDBt3xtbNDFt3xtbMzc7NDBtIBtbMzA7NDFt3xtbMzc7NDBtIBtbMzA7NDFt3xtbMzc7NDBtIBtbMzA7NDFt3xtbNDBt398bWzM3bSAbWzMwbd/fG1s0MW3fG1szNzs0MG0gG1szMG3fG1szN20gG1szMDs0MW3fG1s0MG3fG1s0MW3fG1szNzs0MG0gG1szMDs0MW3fG1s0MG3fG1s0MW3fG1swbQ0KIG5vZGUgG1sxbRtYbm9kZWlkOzgbXBtbMG0uICAgICAgICAgICAgICAgICAgIBtbMTszMTs0MW3cG1szNzs0MG0gICAbWzMxOzQxbdwbWzM3OzQwbSAbWzMxOzQxbdwbWzM3OzQwbSAbWzMxOzQxbdwbWzM3OzQwbSAbWzMxOzQxbdwbWzM3OzQwbSAbWzMxbd/fG1s0MW3cG1szNzs0MG0gICAbWzMxOzQxbdwbWzM3OzQwbSAbWzMxOzQxbdwbWzQwbd/cG1szN20gG1szMTs0MW3cG1szNzs0MG0gG1szMTs0MW3cG1szNzs0MG0gG1szMTs0MW3cG1swbSAgICAgG1sxOzMxOzQxbdwbWzM3OzQwbSAbWzMxOzQxbdwbWzM3OzQwbSAbWzMxOzQxbdwbWzQwbSAbWzQxbdwbWzM3OzQwbSAbWzMxOzQxbdwbWzM3OzQwbSAbWzMxOzQxbdwbWzBtDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgG1sxbd/f3yDf398g3yDfIN/f3yAgIN8g3yDfIN/f3yDf398gICDfIN8g39/fIN8g3xtbMG0NCiBUaGVyZSBhcmUgG1sxbRtYT047MhtcG1swbSBvdGhlcnMgb25saW5lIGFzICAgIBtbMTszMW1QbGVhc2UgYmUgcGF0aWVudCB3aGlsZSB3ZRtbMG0NCiB3ZWxsIGFuZCAbWzFtG1hTVEFUUy5OVVNFUlM7MhtcG1swbSBuZXcgdXNlcnMgdG9kYXkuICAgICAgICAgICAgICAgICAgICAbWzE7MzFtaW5ub3ZhdGUgYW5kIGlyb24gb3V0IHRoZSBidWdzG1swbQ0KDQogWW91IGhhdmUgG1sxbRtYQllURVNMRUZUOy0xMBtcG1swbSBjcmVkaXRzIGxlZnQNCiBhbmQgG1sxbRtYTUFJTFc7LTMbXCAbWzBtbWVzc2FnZXMgaW4geW91ciBtYWlsYm94Lg0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgG1sxbVByZXNzG1swbSAbWzE7NTszMm0wG1swOzE7MzNtIBtbMzdtTWFpbiBNZW51G1swbQ0KDQo=","isPublic":0,"isAccessible":1,"type":"i","key":[1,null,null,null,null,null,null,null,null,null],"date":"2020-07-08T01:30:48.608Z"}
|
||||||
|
@ -1 +1 @@
|
|||||||
{"version":1,"frame":998,"index":"a","owner":9,"cost":0,"content":"G1swbRtbMTszMG3ExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQbWzBtDQogG1sxOzMxbdzcxNwbWzM3bSAbWzMybdzcxNwbWzM3bSAbWzM0bdzcxNwbWzM3bSAbWzMzbdzcG1swbSAbWzMwOzQ3bSDc3CAgINzcxNwg3Nwg3CAbWzM3OzQwbQ0KIBtbMTszMW3c3MSxG1szN20gG1szMm2ysRtbMzdtIBtbMzJtsRtbMzdtIBtbMzRt39/E3BtbMzdtIBtbMzNt3NwbWzBtIBtbMzA7NDdtILKxxCAgsrHE3yDf38LfIBtbMzc7NDBtDQogG1sxOzMxbbGwG1swbSAbWzE7MzFtsBtbMG0gG1sxOzMybbGwG1swbSAbWzE7MzJtsBtbMG0gG1sxOzM0bbGwG1swbSAbWzE7MzRtsBtbMG0gG1sxOzMzbbGwG1swbSAbWzMwOzQ3bSCxsCCwILGwILAgsbAgsCAbWzM3OzQwbQ0KIBtbMTszMW3f38TfG1swbSAbWzE7MzJt398bWzBtIBtbMTszMm3fG1swbSAbWzE7MzRt39/E3xtbMG0gG1sxOzMzbd/fG1swbSAbWzMwOzQ3bSDf38TfIN/fxN8g398g3yAbWzM3OzQwbQ0KG1sxOzMwbcTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExBtbMG0NCg0KG1sxbUhtbSwgYSBzeXN0ZW0gG1szMW1FUlJPUhtbMzdtIG9jY3VycmVkLhtbMG0NChtbMW1Ob2RlICA6IBtbMzFtG1hub2RlaWQ7OBtcG1swbQ0KG1sxbVN5c3RlbTogG1szMW1AQkJTLUwxMEAbWzBtDQoNChtbMW1JZiB0aGlzIGtlZXBzIGhhcHBlbmluZywgeW91IG1heSBuZWVkIHRvIHRlbGwgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yG1swbQ0KG1sxbXZpYSBwYWdlIBtbMzJtKjA4G1swbQ0KDQobWzFtVG8gdHJ5IGFnYWluLCBwbGVhc2UgcHJlc3MgG1szMm0wG1swbQ0K","isPublic":1,"isAccessible":1,"type":"i","key":[0,null,null,null,null,null,null,null,null,null],"date":"2021-02-18T00:52:54.117Z"}
|
{"version":1,"frame":998,"index":"a","owner":9,"cost":0,"content":"G1swbRtbMTszMG3ExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQbWzBtDQogG1sxOzMxbdzcxNwbWzM3bSAbWzMybdzcxNwbWzM3bSAbWzM0bdzcxNwbWzM3bSAbWzMzbdzcG1swbSAbWzMwOzQ3bSDc3CAgINzcxNwg3Nwg3CAbWzM3OzQwbQ0KIBtbMTszMW3c3MSxG1szN20gG1szMm2ysRtbMzdtIBtbMzJtsRtbMzdtIBtbMzRt39/E3BtbMzdtIBtbMzNt3NwbWzBtIBtbMzA7NDdtILKxxCAgsrHE3yDf38LfIBtbMzc7NDBtDQogG1sxOzMxbbGwG1swbSAbWzE7MzFtsBtbMG0gG1sxOzMybbGwG1swbSAbWzE7MzJtsBtbMG0gG1sxOzM0bbGwG1swbSAbWzE7MzRtsBtbMG0gG1sxOzMzbbGwG1swbSAbWzMwOzQ3bSCxsCCwILGwILAgsbAgsCAbWzM3OzQwbQ0KIBtbMTszMW3f38TfG1swbSAbWzE7MzJt398bWzBtIBtbMTszMm3fG1swbSAbWzE7MzRt39/E3xtbMG0gG1sxOzMzbd/fG1swbSAbWzMwOzQ3bSDf38TfIN/fxN8g398g3yAbWzM3OzQwbQ0KG1sxOzMwbcTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExBtbMG0NCg0KG1sxbUhtbSwgYSBzeXN0ZW0gG1szMW1FUlJPUhtbMzdtIG9jY3VycmVkLhtbMG0NChtbMW1Ob2RlICA6IBtbMzFtG1hub2RlaWQ7OBtcG1swbQ0KG1sxbVN5c3RlbTogG1szMW0bWEJCUzsxMBtcG1swbQ0KDQobWzFtSWYgdGhpcyBrZWVwcyBoYXBwZW5pbmcsIHlvdSBtYXkgbmVlZCB0byB0ZWxsIHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvchtbMG0NChtbMW12aWEgcGFnZSAbWzMybSowOBtbMG0NCg0KG1sxbVRvIHRyeSBhZ2FpbiwgcGxlYXNlIHByZXNzIBtbMzJtMBtbMG0NCg==","isPublic":1,"isAccessible":1,"type":"i","key":[0,null,null,null,null,null,null,null,null,null],"date":"2021-02-18T00:52:54.117Z"}
|
||||||
|
@ -1 +1 @@
|
|||||||
{"version":1,"frame":99,"index":"a","owner":9,"cost":0,"content":"G1swbRtbMTszMG3ExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQbWzBtICAgICAgICAgG1sxbdq/G1swbQ0KIBtbMTszMW3c3MTcG1szN20gG1szMm3c3MTcG1szN20gG1szNG3c3MTcG1szN20gG1szM23c3BtbMG0gG1szMDs0N20g3NwgICDc3MTcINzcINwgG1szNzs0MG0gICAbWzFtwr/av9q/2rTDv7/awr8bWzBtICAgICAgICAgICAgG1sxOzMwbUBEQVRFVElNRXxMMTVAG1swbQ0KIBtbMTszMW3c3MSxG1szN20gG1szMm2ysRtbMzdtIBtbMzJtsRtbMzdtIBtbMzRt39/E3BtbMzdtIBtbMzNt3NwbWzBtIBtbMzA7NDdtILKxxCAgsrHE3yDf38LfIBtbMzc7NDBtICAgs7Ozs7Ozs7Ozs7Ozw9kgICAgICAgICAgICAgICAgICAgG1sxOzMwbUBUSU1FfEw4QBtbMG0NCiAbWzE7MzFtsbAbWzBtIBtbMTszMW2wG1swbSAbWzE7MzJtsbAbWzBtIBtbMTszMm2wG1swbSAbWzE7MzRtsbAbWzBtIBtbMTszNG2wG1swbSAbWzE7MzNtsbAbWzBtIBtbMzA7NDdtILGwILAgsbAgsCCxsCCwIBtbMzc7NDBtICAgG1sxOzMwbcG0wNnA2cDZwNnAtMHZG1swbQ0KIBtbMTszMW3f38TfG1swbSAbWzE7MzJt398bWzBtIBtbMTszMm3fG1swbSAbWzE7MzRt39/E3xtbMG0gG1sxOzMzbd/fG1swbSAbWzMwOzQ3bSDf38TfIN/fxN8g398g3yAbWzM3OzQwbSAgIBtbMTszMG3E2RtbMzFtICAgICAgICAbWzMwbcTZG1swbQ0KG1sxOzMwbcTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExBtbMG0gICAgICAgICAgIBtbMTs1OzMybSowIxtbMDsxbSB0byBnZXQgYmFjayB0byB0aGUgTWFpbiBNZW51G1swbQ0KDQogIFRoYW5rcyBmb3IgdmlzaXRpbmcgG1sxOzMxbUEbWzMybU4bWzM0bVMbWzMzbUkbWzA7MzA7NDdtdGV4G1szNzs0MG0gG1sxbUBNRU1PMi1MMjBAG1swbQ0KICBZb3Ugd2VyZSBvbiBub2RlIBtbMW0bWG5vZGVpZDs4G1wgG1swbXByb3ZpZGVkIGJ5IBtbMW1AQkJTLUwxMEAbWzBtDQogIHdpdGggG1sxbUBTVEFUUy5MVE9EQVktWjJAG1swbSBvdGhlcnMuDQoNCiAgWW91IGhhdmUgG1sxbUBCWVRFU0xFRlRAG1swbSBjcmVkaXRzIGxlZnQgYW5kIBtbMW1ATUFJTFdAIBtbMG1tZXNzYWdlcyBpbiB5b3VyIG1haWxib3guDQogIFRvZGF5IHlvdSd2ZSBiZWVuIG9uIGZvciAbWzFtQFNUQVRTLlRUT0RBWS1aMkAbWzBtIG1pbnV0ZXMuDQoNCiAgG1sxbVByZXNzG1swbSAbWzE7NTszMm0jG1swOzE7MzNtIBtbMzdtdG8gZGlzY29ubmVjdC4bWzBtDQo=","isPublic":1,"isAccessible":1,"type":"i","key":[0,null,null,null,null,null,null,null,null,null],"date":"2020-07-15T12:15:47.742Z"}
|
{"version":1,"frame":99,"index":"a","owner":9,"cost":0,"content":"G1swbRtbMTszMG3ExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQbWzBtICAgICAgICAgG1sxbdq/G1swbQ0KIBtbMTszMW3c3MTcG1szN20gG1szMm3c3MTcG1szN20gG1szNG3c3MTcG1szN20gG1szM23c3BtbMG0gG1szMDs0N20g3NwgICDc3MTcINzcINwgG1szNzs0MG0gICAbWzFtwr/av9q/2rTDv7/awr8bWzBtICAgICAgICAgICAgG1sxOzMwbRtYREFURVRJTUU7MTUbXBtbMG0NCiAbWzE7MzFt3NzEsRtbMzdtIBtbMzJtsrEbWzM3bSAbWzMybbEbWzM3bSAbWzM0bd/fxNwbWzM3bSAbWzMzbdzcG1swbSAbWzMwOzQ3bSCyscQgILKxxN8g39/C3yAbWzM3OzQwbSAgILOzs7Ozs7Ozs7Ozs8PZICAgICAgICAgICAgICAgICAgIBtbMTszMG0bWFRJTUU7OBtcG1swbQ0KIBtbMTszMW2xsBtbMG0gG1sxOzMxbbAbWzBtIBtbMTszMm2xsBtbMG0gG1sxOzMybbAbWzBtIBtbMTszNG2xsBtbMG0gG1sxOzM0bbAbWzBtIBtbMTszM22xsBtbMG0gG1szMDs0N20gsbAgsCCxsCCwILGwILAgG1szNzs0MG0gICAbWzE7MzBtwbTA2cDZwNnA2cC0wdkbWzBtDQogG1sxOzMxbd/fxN8bWzBtIBtbMTszMm3f3xtbMG0gG1sxOzMybd8bWzBtIBtbMTszNG3f38TfG1swbSAbWzE7MzNt398bWzBtIBtbMzA7NDdtIN/fxN8g39/E3yDf3yDfIBtbMzc7NDBtICAgG1sxOzMwbcTZG1szMW0gICAgICAgIBtbMzBtxNkbWzBtDQobWzE7MzBtxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEG1swbSAgICAgICAgICAgG1sxOzU7MzJtKjAjG1swOzFtIHRvIGdldCBiYWNrIHRvIHRoZSBNYWluIE1lbnUbWzBtDQoNCiAgVGhhbmtzIGZvciB2aXNpdGluZyAbWzE7MzFtQRtbMzJtThtbMzRtUxtbMzNtSRtbMDszMDs0N210ZXgbWzM3OzQwbSAbWzFtG1hSRUFMTkFNRTsyMBtcG1swbQ0KICBZb3Ugd2VyZSBvbiBub2RlIBtbMW0bWG5vZGVpZDs4G1wgG1swbXByb3ZpZGVkIGJ5IBtbMW0bWEJCUzsxMBtcG1swbQ0KICB3aXRoIBtbMW0bWFNUQVRTLkxUT0RBWTsyG1wbWzBtIG90aGVycy4NCg0KICBZb3UgaGF2ZSAbWzFtG1hCWVRFU0xFRlQ7LTEwG1wbWzBtIGNyZWRpdHMgbGVmdCBhbmQgG1sxbRtYTUFJTFc7LTMbXCAbWzBtbWVzc2FnZXMgaW4geW91ciBtYWlsYm94Lg0KICBUb2RheSB5b3UndmUgYmVlbiBvbiBmb3IgG1sxbRtYU1RBVFMuVFRPREFZOy0zG1wbWzBtIG1pbnV0ZXMuDQoNCiAgG1sxbVByZXNzG1swbSAbWzE7NTszMm0jG1swOzE7MzNtIBtbMzdtdG8gZGlzY29ubmVjdC4bWzBtDQo=","isPublic":1,"isAccessible":1,"type":"i","key":[0,null,null,null,null,null,null,null,null,null],"date":"2020-07-15T12:15:47.742Z"}
|
||||||
|
@ -1 +1 @@
|
|||||||
{"version":1,"frame":99,"index":"b","owner":9,"cost":0,"content":"G1swbRtbMTszMG3ExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQbWzBtICAgICAgICAgG1sxbdq/G1swbQ0KIBtbMTszMW3c3MTcG1szN20gG1szMm3c3MTcG1szN20gG1szNG3c3MTcG1szN20gG1szM23c3BtbMG0gG1szMDs0N20g3NwgICDc3MTcINzcINwgG1szNzs0MG0gICAbWzFtwr/av9q/2rTDv7/awr8bWzBtICAgICAgICAgICAgG1sxOzMwbUBEQVRFVElNRXxMMTVAG1swbQ0KIBtbMTszMW3c3MSxG1szN20gG1szMm2ysRtbMzdtIBtbMzJtsRtbMzdtIBtbMzRt39/E3BtbMzdtIBtbMzNt3NwbWzBtIBtbMzA7NDdtILKxxCAgsrHE3yDf38LfIBtbMzc7NDBtICAgs7Ozs7Ozs7Ozs7Ozw9kgICAgICAgICAgICAgICAgICAgG1sxOzMwbUBUSU1FfEw4QBtbMG0NCiAbWzE7MzFtsbAbWzBtIBtbMTszMW2wG1swbSAbWzE7MzJtsbAbWzBtIBtbMTszMm2wG1swbSAbWzE7MzRtsbAbWzBtIBtbMTszNG2wG1swbSAbWzE7MzNtsbAbWzBtIBtbMzA7NDdtILGwILAgsbAgsCCxsCCwIBtbMzc7NDBtICAgG1sxOzMwbcG0wNnA2cDZwNnAtMHZG1swbQ0KIBtbMTszMW3f38TfG1swbSAbWzE7MzJt398bWzBtIBtbMTszMm3fG1swbSAbWzE7MzRt39/E3xtbMG0gG1sxOzMzbd/fG1swbSAbWzMwOzQ3bSDf38TfIN/fxN8g398g3yAbWzM3OzQwbSAgIBtbMTszMG3E2RtbMzFtICAgICAgICAbWzMwbcTZG1swbQ0KG1sxOzMwbcTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExBtbMG0NCg0KICBUaGFua3MgZm9yIHZpc2l0aW5nIBtbMTszMW1BG1szMm1OG1szNG1TG1szM21JG1swOzMwOzQ3bXRleBtbMzc7NDBtIBtbMW1ATUVNTzItTDIwQBtbMG0NCiAgWW91IHdlcmUgb24gbm9kZSAbWzFtG1hub2RlaWQ7OBtcIBtbMG1wcm92aWRlZCBieSAbWzFtQEJCUy1MMTBAG1swbQ0K","isPublic":1,"isAccessible":1,"type":"t","key":[1,null,null,null,null,null,null,null,null,null],"date":"2020-07-08T01:48:01.797Z"}
|
{"version":1,"frame":99,"index":"b","owner":9,"cost":0,"content":"G1swbRtbMTszMG3ExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQbWzBtICAgICAgICAgG1sxbdq/G1swbQ0KIBtbMTszMW3c3MTcG1szN20gG1szMm3c3MTcG1szN20gG1szNG3c3MTcG1szN20gG1szM23c3BtbMG0gG1szMDs0N20g3NwgICDc3MTcINzcINwgG1szNzs0MG0gICAbWzFtwr/av9q/2rTDv7/awr8bWzBtICAgICAgICAgICAgG1sxOzMwbRtYREFURVRJTUU7MTUbXBtbMG0NCiAbWzE7MzFt3NzEsRtbMzdtIBtbMzJtsrEbWzM3bSAbWzMybbEbWzM3bSAbWzM0bd/fxNwbWzM3bSAbWzMzbdzcG1swbSAbWzMwOzQ3bSCyscQgILKxxN8g39/C3yAbWzM3OzQwbSAgILOzs7Ozs7Ozs7Ozs8PZICAgICAgICAgICAgICAgICAgIBtbMTszMG0bWFRJTUU7OBtcG1swbQ0KIBtbMTszMW2xsBtbMG0gG1sxOzMxbbAbWzBtIBtbMTszMm2xsBtbMG0gG1sxOzMybbAbWzBtIBtbMTszNG2xsBtbMG0gG1sxOzM0bbAbWzBtIBtbMTszM22xsBtbMG0gG1szMDs0N20gsbAgsCCxsCCwILGwILAgG1szNzs0MG0gICAbWzE7MzBtwbTA2cDZwNnA2cC0wdkbWzBtDQogG1sxOzMxbd/fxN8bWzBtIBtbMTszMm3f3xtbMG0gG1sxOzMybd8bWzBtIBtbMTszNG3f38TfG1swbSAbWzE7MzNt398bWzBtIBtbMzA7NDdtIN/fxN8g39/E3yDf3yDfIBtbMzc7NDBtICAgG1sxOzMwbcTZG1szMW0gICAgICAgIBtbMzBtxNkbWzBtDQobWzE7MzBtxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEG1swbQ0KDQogIFRoYW5rcyBmb3IgdmlzaXRpbmcgG1sxOzMxbUEbWzMybU4bWzM0bVMbWzMzbUkbWzA7MzA7NDdtdGV4G1szNzs0MG0gG1sxbRtYUkVBTE5BTUU7MjAbXBtbMG0NCiAgWW91IHdlcmUgb24gbm9kZSAbWzFtG1hub2RlaWQ7OBtcIBtbMG1wcm92aWRlZCBieSAbWzFtG1hCQlM7MTAbXBtbMG0NCg==","isPublic":1,"isAccessible":1,"type":"t","key":[1,null,null,null,null,null,null,null,null,null],"date":"2020-07-08T01:48:01.797Z"}
|
||||||
|
Loading…
Reference in New Issue
Block a user