Malicious PDF — malware analysis report

Static analysis result for SHA-256 31b900eb231854ea…

MALICIOUS

PDF

522.0 KB First seen: 2026-05-07
MD5: 1da055c1680cf0d9927b5e2cb95d2092 SHA-1: 5cc0f7739046b8096c917156644f7fdbf08e2562 SHA-256: 31b900eb231854ea253901af65001edab8d9d18f91977f3f32ba7bb6b7f99e9a
122 Risk Score

🔏 Digital signature Signed

A signature covers the whole signed byte range — PDF JavaScript is never signed on its own — and does not by itself mean the document is safe.

Malware Insights

MITRE ATT&CK
T1566.002 Spearphishing Attachment T1059.001 PowerShell

The PDF is encrypted and contains an OpenAction, which is a common technique to obfuscate malicious content and bypass static analysis. The heuristic 'PDF_IMAGE_ONLY_LURE' suggests the document may be designed to trick the user into interacting with it, possibly by presenting an image that requires further action. No scripts were extracted from this sample, and the document body was unreadable.

Machine Learning

  • Nyx PDF Classifier clean score 0.2380

Heuristics 4

  • PDF JavaScript exploit cluster critical PDF_JS_EXPLOIT_CLUSTER
    PDF combines an executable JavaScript/action surface with exploit staging indicators such as eval/unescape/fromCharCode, XFA script content, or a related CVE pattern. Benign form JavaScript remains low-severity, but this correlated cluster is high-confidence malicious behavior.
  • Encrypted PDF carries /OpenAction — payload hidden from static analysis high PDF_ENCRYPTED_WITH_JS
    PDF declares /Encrypt and also references an executable trigger (/OpenAction). Document encryption hides the JavaScript body and stream contents from static scanners — combined with auto-execution indicators this is a known evasion pattern used to deliver weaponised JavaScript that the analyst cannot inspect without the decryption key.
  • Suspicious extracted artifact medium EXTRACTED_FILE_STATIC_TRIAGE
    One or more files extracted from inside this sample matched static suspicious-content checks such as script obfuscation, encoded payload blobs, packed data, or execution/download terms.
  • Embedded URL info EMBEDDED_URL
    One or more URLs were extracted from the document. The URL itself is not a detection — see the per-URL labels for which channel (macro, JS, link annotation, document body, ...) reached each URL.
    URL http://www.w3.org/1999/xhtml Referenced by PDF JavaScript
    • http://www.xfa.org/schema/xfa-data/1.0/Referenced by PDF JavaScript

Extracted artifacts 32

Files carved from inside the sample during analysis.

FilenameKindSourceSize
javascript_obj0003_000.js pdf-javascript-stream PDF /JS object 3 at offset 0x2AA9 81 bytes
SHA-256: 369b022e2e2a68562237a3834bcf14b8b246bf590defef8c115103ae62f5ff9b
Preview script
First 1,000 lines of the extracted script
markedDirty = this.dirty;	// dirty marker to dirty (false) after saving
javascript_obj0094_002.js pdf-javascript-stream PDF /JS object 94 at offset 0x14379 159 bytes
SHA-256: 2dcba639ae443f66cbd1adb75454869b7289e9f19fff3999a24842257793dce1
Preview script
First 1,000 lines of the extracted script
registrySave();
Library_Save();

var x = new XML ( this.getField("Pandora").value );
this.getField("Pandora").value = x.toString();
javascript_obj0096_003.js pdf-javascript-stream PDF /JS object 96 at offset 0x145D4 70 bytes
SHA-256: ea33fce70184b992dc1183dc9938f62a0eda9621a027c2e79444ebe575c64a63
Preview script
First 1,000 lines of the extracted script
registryInit();
Library_Init();
javascript_obj0101_004.js pdf-javascript-stream PDF /JS object 101 at offset 0x14C70 51 bytes
SHA-256: e11d77e7cd069a9f6875f689550ce92e1250270f78b373b294170cbfc7946e39
Preview script
First 1,000 lines of the extracted script
buttonHandler(event.target.name);
javascript_obj0102_005.js pdf-javascript-stream PDF /JS object 102 at offset 0x14CE4 56 bytes
SHA-256: ac9c54af4be3ccdb5bed5f8439d2029220a6dfa0138a69e5ad94ecd67c05408c
Preview script
First 1,000 lines of the extracted script
buttonMouseInHandler(event.target.name);
javascript_obj0103_006.js pdf-javascript-stream PDF /JS object 103 at offset 0x14D5B 57 bytes
SHA-256: e35422cfb3a78c84c743c3b1d501af0c782a150accab192384426fd01df3af67
Preview script
First 1,000 lines of the extracted script
buttonMouseOutHandler(event.target.name);
javascript_obj0119_007.js pdf-javascript-stream PDF /JS object 119 at offset 0x1A165 45 bytes
SHA-256: 2cdf669f5a758d5db825fd8878d4741979b1b6f8b21ccb67c0d4782e41dded14
Preview script
First 1,000 lines of the extracted script
iconHandler(event.target.name);
javascript_obj0120_008.js pdf-javascript-stream PDF /JS object 120 at offset 0x1A1CF 52 bytes
SHA-256: 8e3232176741a94a625d7ad2d75b7986afc9d580f13fe396165cd12f365534c5
Preview script
First 1,000 lines of the extracted script
iconMouseInHandler(event.target.name);
javascript_obj0121_009.js pdf-javascript-stream PDF /JS object 121 at offset 0x1A240 53 bytes
SHA-256: 6024b57da6c2ddd117b140ebda0f7c953a16d926400a17e9aca58ac016eb1e13
Preview script
First 1,000 lines of the extracted script
iconMouseOutHandler(event.target.name);
javascript_obj0124_010.js pdf-javascript-stream PDF /JS object 124 at offset 0x1A596 57 bytes
SHA-256: f8ccdbd2e7a9fa3030d905ac604c162343e2d97cb3bc85117eb035e4d49f32fc
Preview script
First 1,000 lines of the extracted script
iconHandler(event.target.name);
javascript_obj0125_011.js pdf-javascript-stream PDF /JS object 125 at offset 0x1A618 64 bytes
SHA-256: e61f0a7bc484d0c1d54214f5c14066da19d4a688e98c238d8267c90ee217993c
Preview script
First 1,000 lines of the extracted script
iconMouseInHandler(event.target.name);
javascript_obj0126_012.js pdf-javascript-stream PDF /JS object 126 at offset 0x1A6A1 65 bytes
SHA-256: 4b73e069779b98e8fcf92440e2f51bb7583cac16c6df1c6303b03fe24e77e621
Preview script
First 1,000 lines of the extracted script
iconMouseOutHandler(event.target.name);
javascript_obj0140_013.js pdf-javascript-stream PDF /JS object 140 at offset 0x1B32E 54 bytes
SHA-256: 5327699d9ab37b0ebdbf2e8fbb4daa074235b27c9ffc25cc8c0de5179187caed
Preview script
First 1,000 lines of the extracted script
iconMouseInHandler(event.target.name);
javascript_obj0154_014.js pdf-javascript-stream PDF /JS object 154 at offset 0x1BF63 55 bytes
SHA-256: b43e7b18d3e057614f4f87e84ec29a1c8e2f945859bdbc64dd117674dcd81409
Preview script
First 1,000 lines of the extracted script
iconHandler(event.target.name);
javascript_obj0182_015.js pdf-javascript-stream PDF /JS object 182 at offset 0x1FEA6 66 bytes
SHA-256: af95a99c5220df77d554a0edc4b9ca23bc20c724da8997246539ce98d6e328c4
Preview script
First 1,000 lines of the extracted script
iconMouseInHandler(event.target.name);
javascript_obj0183_016.js pdf-javascript-stream PDF /JS object 183 at offset 0x1FF33 67 bytes
SHA-256: 036dcffe7b5e9375681d5a1124f39aa04510ffafee2364d2a2bb6db1d08940b3
Preview script
First 1,000 lines of the extracted script
iconMouseOutHandler(event.target.name);
javascript_obj0191_017.js pdf-javascript-stream PDF /JS object 191 at offset 0x20706 43 bytes
SHA-256: f07fd63fb2bd753fb965aab402bb52b78c0086832c020ac4c452fd1558f53d57
Preview script
First 1,000 lines of the extracted script
iconHandler(event.target.name);
javascript_obj0208_019.js pdf-javascript-stream PDF /JS object 208 at offset 0x215C5 100 bytes
SHA-256: f4e96dd586aef3a442855b0260db5e6c43cdccb35265ea8db86fb0ac21345683
Preview script
First 1,000 lines of the extracted script
showPage ( PageText, true );
this.getField("Button_SavePage").display = display.hidden;
javascript_obj0210_020.js pdf-javascript-stream PDF /JS object 210 at offset 0x217D8 108 bytes
SHA-256: 281c1d6d29eb48472158240af832ec9e99999ac78969d14c6252219f3ec82ec2
Preview script
First 1,000 lines of the extracted script
showPage ( PageText, false );
this.getField("Button_SavePage").display = display.visible;
javascript_obj0267_021.js pdf-javascript-stream PDF /JS object 267 at offset 0x24910 49 bytes
SHA-256: bec514f9dfa0a7edd2e2fe0f70e0990d6c3020ca2be8c52c66e9185454f26e2b
Preview script
First 1,000 lines of the extracted script
iconHandler(event.target.name);
javascript_obj0350_022.js pdf-javascript-stream PDF /JS object 350 at offset 0x2935A 103 bytes
SHA-256: da14f85987d7de78c428f8a45eaa4fb7e6b1faa080a6bb9b1da630402530d4ee
Preview script
First 1,000 lines of the extracted script
if ( typeof FDFLoadedStatus == "undefined" ) initialiseFromXFDF();
var FDFLoadedStatus = true;
javascript_obj0358_023.js pdf-javascript-stream PDF /JS object 358 at offset 0x2955A 48 bytes
SHA-256: eb8dc78560aaccf00ff6de42306f40580990a298ea34f9bf6111b1369f8ac3e6
Preview script
First 1,000 lines of the extracted script
this.getField("Transmitter").value = "";
javascript_obj0367_024.js pdf-javascript-stream PDF /JS object 367 at offset 0x379CC 4824 bytes
SHA-256: afb19f920ff4d086db58d4795f57405f771824e3722e87a7af7e272e2ba9f9a2
Detection
ClamAV: No threats found
Obfuscation or payload: likely
Carved artifact contains 1 eval/decoder/string-building token(s). 38 of 63 identifiers look randomly generated (e.g. 'dDtTBhoJdR0OA2a1IR0SAzZj1gF1HlOfsOCcIkcE') — consistent with name-mangling obfuscation.
Preview script
First 1,000 lines of the extracted script
var DlgMainMenuCode = 
"01009237004211An11JC11Jp11bA11bb11Io11np11pN11JI11Jd11bJ11Uf11UG11JA11bc11bo11bN11bn11cU11cA11cb11cf1"+
"1cd11cI11UI11Ud11Ap11cJ11UU11cc11U111c111UA11AC11cn11II11cB11Jc11IA11JJ11Uo11Un11Uc11In11Af11Ad11co11"+
"If111n11Jn11Ub11cG11bp11AN11Ic11IJ11UJ11IU11IB11IN11AA11Ip11Ib11IC11Id11A11BAc1J1b1I1bUcfdJGboNBnCpKO"+
"DkID1g1G2p1LKCwAc1J1b1I1bUcfdJGboNBnCpV1d1BIdCC1g1Gf2c2DcFgFhJ2h1RN2i2BIdCvBTB2gJQG1B2c1KDm1C1digI1Eo"+
"CwAc1J1b1I1bUcfdJGboNBnCpWCtU1y1SH1bV1d1BIdCC1g1Gf1v1PhMFc2g2GBdoCAy1J1b1I1bUcfdJGboNBnP1gOiIRAAA1i1F"+
"uIJdfJgEFjIdBhfRAAA1bWwZgBCegO1fPNjCIdCtBfi1Fggs1GCh1dAD1E2b2BipZgBCenMjRwDBfMfRAAAbbBiIgBF2c2AlO1fPN"+
"jCIdCtLJgBCemUzZ1q1J1b1IkEc1x2EBiJ1g1GAzZyFTkJgBCey1BCddlLEc1x2EBilBTyMfRAAAlHsAVifO1fPNjCIdCtLJgBCem"+
"UzZ1q1J1b1Ie2i1ORdJ1g1GkJgBCeyJOF1e1FsBBTyMfARAAAfwSH1bXjO1fPNjCIdCtLJgBCemUzZAkJgBCey1EBilQgFCtUcpBT"+
"yMfRAAAfrfhA1EjO1fPNjCIdCtLJgBCemUzZA1bUcfdJGboNBnCpKODkID1g1GA1jPTkJgBCey1EBilQgFCtUcpBTyMfRAAAfrfhF"+
"YjO1fPNjCIdCtLJgBCemUzZA1bUcfdJGboNBnCpKODkID1g1GA1eKTkJgBCey1EBilQgFCtUcpBTyMfRAAAfrfhm1QjO1fPNjCIdC"+
"tLJgBCemUzZA1bUcfdJGboNBnCpKODkID1g1GA1v1CTkJgBCey1EBilQgFCtUcpBTyMfRAAAfrfhc1GjO1fPNjCIdCtLJgBCemUzZ"+
"A1bUcfdJGboNBnCpKODkID1g1GA1lRTkJgBCey1EBilQgFCtUcpBTyMfRAAAfrfhe1IjO1fPNjCIdCtLJgBCemUzZA1bUcfdJGboN"+
"BnCpKODkID1g1GA1nTTkJgBCey1EBilQgFCtUcpBTyMfRAAAfrfhl1PjO1fPNjCIdCtLJgBCemUzZA1bUcfdJGboNBnCpKODkID1g"+
"1GA1u1BTkJgBCey1EBilQgFCtUcpBTyMfRAAAfrfhi1MjO1fPNjCIdCtLJgBCemUzZA1bUcfdJGboNBnCpKODkID1g1GA1rXTkJgB"+
"Cey1EBilQgFCtUcpBTyMfRAAAfrfhn1RjO1fPNjCIdCtLJgBCemUzZA1bUcfdJGboNBnCpKODkID1g1GA1w1DTkJgBCey1EBilQgF"+
"CtUcpBTyMfRAAAfrfhk1OjO1fPNjCIdCtLJgBCemUzZA1bUcfdJGboNBnCpKODkID1g1GA1tZTkJgBCey1EBilQgFCtUcpBTyMfRA"+
"AAfrfhj1NjO1fPNjCIdCtLJgBCemUzZA1bUcfdJGboNBnCpKODkID1g1GA1sYTkJgBCey1EBilQgFCtUcpBTyMfRAAAfrfcf1EjO1"+
"fPNjCIdCtLJgBCemUzZA1bUcfdJGboNBnCpKODkID1g1G1efPTkJgBCey1EBilQgFCtUcpBTyMfRAAAfrfcAYjO1fPNjCIdCtLJgB"+
"CemUzZA1bUcfdJGboNBnCpKODkID1g1G1eAKTkJgBCey1EBilQgFCtUcpBTyMfRAAAfrfcr1QjO1fPNjCIdCtLJgBCemUzZA1bUcf"+
"dJGboNBnCpKODkID1g1G1er1CTkJgBCey1EBilQgFCtUcpBTyMfRAAAfrfch1GjO1fPNjCIdCtLJgBCemUzZA1bUcfdJGboNBnCpK"+
"ODkID1g1G1ehRTkJgBCey1EBilQgFCtUcpBTyMfRAAAfrfcj1IjO1fPNjCIdCtLJgBCemUzZA1bUcfdJGboNBnCpKODkID1g1G1ej"+
"TTkJgBCey1EBilQgFCtUcpBTyMfRAAAfrfcq1PjO1fPNjCIdCtLJgBCemUzZA1bUcfdJGboNBnCpKODkID1g1G1eq1BTkJgBCey1E"+
"BilQgFCtUcpBTyMfRAAAfrfcn1MjO1fPNjCIdCtLJgBCemUzZA1bUcfdJGboNBnCpKODkID1g1G1enXTkJgBCey1EBilQgFCtUcpB"+
"TyMfRAAAfrfcs1RjO1fPNjCIdCtLJgBCemUzZA1bUcfdJGboNBnCpKODkID1g1G1es1DTkJgBCey1EBilQgFCtUcpBTyMfRAAAfrf"+
"cp1OjO1fPNjCIdCtLJgBCemUzZA1bUcfdJGboNBnCpKODkID1g1G1epZTkJgBCey1EBilQgFCtUcpBTyMfRAAAfrfco1NjO1fPNjC"+
"IdCtLJgBCemUzZA1bUcfdJGboNBnCpKODkID1g1G1eoYTkJgBCey1EBilQgFCtUcpBTyMfARAAAkHuMw1H1j1BIdCmdRAAAzIR0GA"+
"cfpTlOflJGbCqNBnKhfR0GAddDtTBhoJdR0GA2a1IR0KAzZj1gF1HlOf1l1Pc1j1HhFBFhGlChRfex1FBmOfcBFhGlCIBhG1f1DhJ"+
"dDtTBhoJdR0OA2a1IR0SAzZj1gF1HlOfsOCcIkcEG2b1UEhLiGtJMjeJsOCcEhgPChkJfwCWKfpTlmUcfdJGboNBnCpV1d1BIdCkB"+
"hL1bUy1LjBjEpo1GFBFhGuTBhfJcBFhGlCIBhG1f1Dhs1BChfOffJgBCeDhpXceeOjySMjmMfR0SAzZj1gF1HlOfdB1d1FhLiGtJM"+
"jeOfdB1dGYhz1LjBjEO1lg1FgPChkJfO1t1HBhL1bUy1LjBjEO1n1BBhL1bUfPChkJfO1n1BmMfR0SA1oAlcjGAibNDbA1YzZj1gF"+
"1HlOfwMGAFCdhMbiGtJMjeOfrfhA1EhMcfpTlOf1vLROGtW1fPNjCIdCCkHuMw1H1j1BIdCdhM1m1LjBjEO1ljLWMsPChkJfO1lAY"+
"M1f1BChfOffJgBCeDhM1cXceeOjySMjmMfR0SAzZj1gF1HlOfdB1d1FhLiGtJMjeOfdB1dGYhz1LjBjEO1lg1FgPChkJfO1er1JBh"+
"L1bUy1LjBjEO1n1BBhL1bUfPChkJfO1n1BmMfR0SAzZj1gF1HlOfwMGAFCdhLiGtJMjeOfwSH1bXhKfpTlO1bUcfdJGboNBnCpWCt"+
"U1y1SH1bV1d1BIdCkz1LjBjEphCWgPChkJfwCWs1BChfJfJgBCeDhpXceeOjySMjmMfR0OA1x1GR0KAyMfR0GA1x1GRAAAyHhFCAj"+
"UcfdJGboNBnrGWwZgBCenBBC";

GetAttachementList();
//console.clear();
//console.println("Names:"+ AttachementNameList );
//console.println("Files:"+ AttachementFileList );

var DlgCode = Decrypt ( DlgMainMenuCode, "" );
var Dlg_MainMenu_Choice = -1;
var Dlg_MainMenu_Caption = "Foliant of bizhub PRESS C7000 main menu\rplease choose a function";
var Dlg_MainMenu_CloseBtnCaption = "Close menu";

// current line in dialog-code to be replaced:   //[BUTTONS]\\ { type: "button", item_id: "mb00", name: "System function description", width: 350, height: 33, font: "dialog", bold: true,},

var p = DlgCode.indexOf("//[BUTTONS]\\");
if ( p>0 )
{
	var post = DlgCode.slice(p);
	DlgCode = DlgCode.slice(0,p);
	for ( var bn=0; bn<AttachementNameList.length; bn++ )
	{
		var bnStr = bn+""; if ( bnStr.length<2 ) bnStr = '0'+bnStr;
		DlgCode+= '{ type: "button", item_id: "mb'+bnStr+'", name: "'+AttachementNameList[bn]+'", width: 300, height: 30, font: "dialog", bold: true,},\r';
	}
	DlgCode += post;
}
eval ( DlgCode );
if ( Dlg_MainMenu_Choice > -1 ) RunAttachement ( AttachementNameList[Dlg_MainMenu_Choice] );
javascript_obj0369_025.js pdf-javascript-stream PDF /JS object 369 at offset 0x3961E 1136 bytes
SHA-256: 18173f4532411188e3f7208bba0425cbce8ffd1a642653cf1d67b91a0713b382
Preview script
First 1,000 lines of the extracted script
var fs = this.getField("Seelensuppe"); //fs.rect = [ 600,842,990,0 ]; 
if (fs.display==display.hidden) fs.display=display.visible; else fs.display=display.hidden;

var f = this.getField("Babelfisch"); 
f.rect = [ -410, 800, -6, 400 ];
f.display = fs.display;

var f = this.getField("Pandora"); 
f.rect = [ -410, 395, -6, 100 ];
f.display = fs.display;

var f = this.getField("Transmitter"); 
f.rect = [ -410, 95, -6, 0 ];
f.display = fs.display;

var f = this.getField("Btn_ShowExtras"); f.rect = [ -270, 840, -8, 814 ];
//f.display = fs.display;

var f = this.getField("Btn_RegLoad"); f.rect = [ -340, 840, -280, 814 ];
f.display = fs.display;

var f = this.getField("Btn_RegSave"); f.rect = [ -410, 840, -350, 814 ];
f.display = fs.display;

var f = this.getField("Button_LoadPage"); f.display = fs.display;
var f = this.getField("Button_LoadPageRaw"); f.display = fs.display;
var f = this.getField("Button_SavePage"); f.display = display.hidden;//fs.display;

var f = this.getField("InfoBoard"); if (fs.display==display.hidden) f.readonly = true; else f.readonly = false;
javascript_obj0403_026.js pdf-javascript-stream PDF /JS object 403 at offset 0x6C27E 794 bytes
SHA-256: 07f29fd2d02fe2c8ed550b50decbc6ea1adbc4250bbf1bb1bc3306ad12f8bb0f
Preview script
First 1,000 lines of the extracted script
var r = this.getField("Btn_Docking").rect;
for ( x=0; x<4;x++) r[x]= ( Math.round( r[x]*1000) ) / 1000;
var dock = '<dock>'+r+'</dock>';

//var cResponse = app.response({cQuestion: "", cTitle: "Docking rect ...", cDefault: d, cLabel: "Response:"});
//if (cResponse == null) app.alert("Thanks for trying anyway.");
//else app.alert("You responded, \""+cResponse+"\", to the health " + "question.",3);

var sel = Registry.System.Logic.Action.toString().split('\n');
var fx = this.getField("Text1");
fx.value = '';
for ( x=0; x<sel.length-1; x++ )
{
	var s = sel[x].split(';')[0];
	var r = this.getField( s ).rect;
	for ( y=0; y<4;y++) r[y]= ( Math.round( r[y]*1000) ) / 1000;
	r = '<rect>'+r+'</rect>';
	fx.value = fx.value + s + '\r' + r + '\r' + dock + '\r';
}
javascript_obj0415_027.js pdf-javascript-stream PDF /JS object 415 at offset 0x753F4 11841 bytes
SHA-256: 689b1712f4c6e4fd67bf74002a7fb96095e01f51869107b963083b425fabb5f5
Preview script
First 1,000 lines of the extracted script
//***********************************************************************************************************
// handler for all events regarding button-fields ( menu and more ) 
// called by buttons-function by: buttonHandler(event.target.name);
//***********************************************************************************************************
function buttonHandler( ButtonName )
{
	markedDirty = this.dirty;	// save the current dirty-status
	switch ( ButtonName )
	{
		case "Btn_CloseDoc":	// close document button action ( upper right corner )
			{
				if (this.external == false) this.closeDoc();
			}	break;
		case "Btn_FullScreen":	// Button to switch to full-screen or normal-screen ( upper right corner )
			{
				if (this.external == false) if ( app.fs.isFullScreen == true ) app.fs.isFullScreen = false; else app.fs.isFullScreen = true;
			}	break;
		case "Btn_InfoAbout":	// Info-, version and history dialog button "?" ( upper right corner )
			{
				Dlg_VersionHistory();
				this.dirty = markedDirty;
			}	break;
		case "Btn_SubmitCRM":	// CRM submit order-list button ( visible, if doc opened in browser )
			{
				this.getField("Transmitter").value = "";
				if ( Library.VisiblePage.toString() != "" )
				{
					//this.getField("Transmitter").value = createXMLOrder().toString();
					//var oXML = new XML(this.getField("Transmitter").value);
					var oXML = new XML( createXMLOrder().toString() );	// create order-XML-value
					oXML.configurationtarget.idsource = "FalconCRM";	// set XML-target-ID-source
					oXML.configurationtarget.idtypename = "opportunityproduct";	// set XML-target-ID-type
					if (this.external == true)	// if opened in browser ...
					{
						var guid = this.URL.substring(this.URL.indexOf("?") + 1).match(/%7B(.+)%7D/);	// extract parameters as array
						guid = guid[1];	// extract opportunity-id-code from array
						oXML.configurationtarget.id = guid;	// set XML-order id-code to opportunity-id
					}
					this.getField("Transmitter").value = '<?xml version="1.0" encoding="utf-8"?>\n' + oXML.toString();	// add XML-version- and char-code-tag
					
					var nButton = app.alert({cMsg: STR("SubmitToCRM","Do you want to submit the current configuration to the CRM?"), cTitle: "Submit order to CRM", nIcon: 2, nType: 2});
					if ( nButton == 4 ) 
					{
						var crmURL = Registry.Internals.settings.crmURL.@value.toString();
						console.println(crmURL);
						
						var cResponse = app.response({cQuestion: "Please type in the URL:",cTitle: "Submit data to the URL ...",cDefault: crmURL, cLabel: "URL:"});
						if (cResponse != null)
						{
							Registry.Internals.settings.crmURL.@value = cResponse; registrySave();
							this.submitForm({ cURL: cResponse, aFields: ["Transmitter"], cSubmitAs: "HTML" });	// submit the form-data	
						}
					}
					//Dlg_SendOrderList2CRM( this.getField("Transmitter").value );
				} 
				else app.alert({cMsg: STR("PleaseFinalise","Please finalise the selection first!") ,cTitle: STR("NotPossible","Function not possible"), nIcon: 1, nType: 0});
				this.getField("Transmitter").value = "";
			}	break;
		case "Btn_Reset":	// Menu-button to reset the whole document
			{
				markedDirty = true;	// set dirty to "changed"
				resetAll();
			}	break;
		case "Btn_SetLanguage":
			{
				markedDirty = true;	// set dirty to "changed"
				var currentLanguage = Library.CurrentLanguage;
				var languageList = {};
				var languageLCID = {};
				var languageListText = {};
				for ( var x =0; x<Library.elements().length(); x++ ) if ( Library.elements()[x].name() == "Language" ) 
				{
					languageList[Library.elements()[x].@text] = Library.elements()[x].@name;
					languageLCID[Library.elements()[x].@text] = Library.elements()[x].@lcid;
					languageListText[Library.elements()[x].@text] = -1; 
					if ( Library.elements()[x].@name == currentLanguage ) currentLanguage = Library.elements()[x].@text;
				}
				var choice = Dlg_SelectListItem ( STR("SetLangDlgCaption","Select the document language")+"", languageListText, currentLanguage, 200, 200 );
				if ( choice != "" )
				{
					for ( var x in languageList ) if ( choice == x ) 
					{
						Library.CurrentLanguage = languageList[x]+"";
						Library.CurrentLanguage.@lcid = languageLCID[x]+"";
						Library_Save();
					}
					Library_Init();
					if ( Library.VisiblePage+"" != "" ) showPage ( "@"+Library.VisiblePage, true );
				}
			}	break;
		case "Btn_Finalise":
			{
				markedDirty = true;	// set dirty to "changed"
				var hyperPageList = PageList;
				var selection = Dlg_SelectListItem ( STR("SelHyperPageDlgCaption","Select information list type")+"", hyperPageList, "", 300, 200 );
				if ( selection != "" )
				{
					this.getField("LogicChart").display = display.hidden;
					finaliseActionLogic();
					for ( var x in hyperPageList ) if ( selection == x ) 
					{
						showPage ( x, true ); 
						Library.VisiblePage = hyperPageList[x]; Library_Save(); 
					}
				}
			}	break;
		case "Btn_FinalisePhysicals":
			{
				markedDirty = true;	// set dirty to "changed"
				this.getField("LogicChart").display = display.hidden;
				finaliseActionLogic();
				var pageName = "Physicals";
				showPage ( "@"+pageName, true ); Library.VisiblePage = pageName; Library_Save();
			}	break;
		case "Btn_Back": 
			{
				markedDirty = true;	// set dirty to "changed"
				var cfgList = Registry.System.Logic.Clicked.split(";");  					// get the list of clicked icons ( no added !! )
				resetAll(); 																// reset the selection
				for ( var x = 0; x<cfgList.length-1; x++ ) iconHandler(cfgList[x]);			// virtually re-click the listed icons except the last one
			}	break;
		case "Btn_SelectScreen": 
			{
				markedDirty = true;	// set dirty to "changed"
				var f = this.getField("Screen");
				if (f.display == display.visible)
				{
					switch ( f.buttonPosition )
					{
						case (position.textOnly): { f.buttonPosition = position.iconOnly; f.fillColor = ["T"]; } break;
						case (position.iconOnly): { f.display = display.hidden;} break;
					}
				} 
				else
				{
					f.buttonPosition = position.textOnly;
					f.fillColor = colorStrToColor( Registry.Internals.colors.screenBG.@value );
					f.display = display.visible;
				}
			}	break;
	}
	arrangeMenuButtons();
	this.dirty = markedDirty; // set the dirty-value to the marker's value
}

//**********************************************************************************************************************
// handler for all buttons at MouseOut-event
//**********************************************************************************************************************
function buttonMouseOutHandler( btnName )	
{
	markedDirty = this.dirty;	// save the current dirty-status
	this.getField( btnName ).fillColor = ["T"];
	this.dirty = markedDirty; // set the dirty-value to the marker's value
}

//**********************************************************************************************************************
// handler for all buttons at MouseIn-event
//**********************************************************************************************************************
function buttonMouseInHandler( btnName )
{
	markedDirty = this.dirty;	// save the current dirty-status
	this.getField( btnName ).fillColor =  colorStrToColor( Registry.Internals.colors.buttonBG.@value );
	this.dirty = markedDirty; // set the dirty-value to the marker's value
}

//**********************************************************************************************************************
// set language depending hint text of buttons and sprites (  mouse-over hint )
//**********************************************************************************************************************
function setMouseHintTexts()
{
	var childIdx = Library.Language.(@name == Library.CurrentLanguage).childIndex();
	for ( var x =0; x<Library.children()[childIdx].SpriteHints.children().length(); x++ )
	{
		var name = Library.children()[childIdx].SpriteHints.children()[x].@name;
		var f = this.getField( name );
		if ( f != null ) f.userName = Library.children()[childIdx].SpriteHints.children()[x].@text;
	}
	for ( var x =0; x<Library.children()[childIdx].ButtonHints.children().length(); x++ )
	{
		var name = Library.children()[childIdx].ButtonHints.children()[x].@name;
		var f = this.getField( name );
		if ( f != null ) f.userName = Library.children()[childIdx].ButtonHints.children()[x].@text;
	}
}

//**********************************************************************************************************************
// set language depending caption text of buttons
//**********************************************************************************************************************
function setButtonCaptions()
{
	var childIdx = Library.Language.(@name == Library.CurrentLanguage).childIndex();
	for ( var x =0; x<Library.children()[childIdx].ButtonCaptions.children().length(); x++ )
	{
		var name = Library.children()[childIdx].ButtonCaptions.children()[x].@name;
		var f = this.getField( name );
		if ( f != null ) f.buttonSetCaption( Library.children()[childIdx].ButtonCaptions.children()[x].@text );
	}
}

//**********************************************************************************************************************
// set position and status of the menu-buttons regarding the visible-settings in the registry
//**********************************************************************************************************************
function arrangeMenuButtons()
{
	var barRect = this.getField("bar_CenterLine").rect;	// get the position and size of the menu-background-bar
	var visBtnNum = 0;	// number of visible menu-buttons
	var visBtnWidth = 0;	// total width of visible menu-buttons
	for ( var x = 0; x<Registry.Internals.menuItems.children().length(); x++ ) 
	{
		var f = this.getField(Registry.Internals.menuItems.children()[x].name());	// get the button
		if ( Registry.Internals.menuItems.children()[x].@visible == true )	// is the button marked as visible ?
		{
			f.display = display.visible;	// make button visible - if not yet
			visBtnNum++; // count the number of visible menu-buttons
			visBtnWidth = f.rect[2] - f.rect[0];	// remember the last visible button's width
		}
		else f.display = display.hidden;	// make button invisible
	}
	var btnOffset = ( ( barRect[2] - barRect[0] ) - visBtnWidth ) / ( visBtnNum-1 );
	var btnCount = 0;
	if ( visBtnNum>=2 ) for ( var x = 0; x<Registry.Internals.menuItems.children().length(); x++ ) 
	{
		var f = this.getField(Registry.Internals.menuItems.children()[x].name());	// get the button
		if ( f.display==display.visible )
		{
			var left = barRect[0];
			var right = left+f.rect[2]-f.rect[0];
			f.rect = [left+btnCount*btnOffset,f.rect[1],right+btnCount*btnOffset,f.rect[3] ];
			btnCount++;
		}
	}
}

//**********************************************************************************************************************
// reset the whole document structure / variables, registry, library, fields ...
//**********************************************************************************************************************
function resetAll()
{
	resetIconStages ();
	resetActionLogic();
	//this.getField("InfoBoard").display = display.hidden;  // not working in Reader !!!
	//this.getField("InfoBoard").rect = [0,0,0,0];
	this.getField("LogicChart").display = display.visible;
	this.getField("InfoBoard").value = "";
	this.getField("InfoBoard").readonly = true;
	Library.VisiblePage = ""; 
	Library_Save();
}
javascript_obj0416_028.js pdf-javascript-stream PDF /JS object 416 at offset 0x75F98 7800 bytes
SHA-256: 8052d784adebc6db6acf70fa75c71aa54a921588e5c8fab44176af755712f91a
Detection
ClamAV: No threats found
Obfuscation or payload: likely
Carved artifact contains 2 eval/decoder/string-building token(s).
Preview script
First 1,000 lines of the extracted script
function Dlg_SendOrderList2CRM( orderText )
{
	var DlgResult = "cancel";
	var DlgOEMCode = "";
	var Dlg_SendOrderList =
	{

	result:"calcel",
	DoDialog: function(){return app.execDialog(this);},
	initialize: function(dialog)
	{
	//******************* extra init action section *******************************

	dialog.load({"edtO": orderText });
	dialog.load({"edtC": Registry.Internals.SubmitCode.toString() });

	//******************* extra init action section *******************************
	},
	commit: function(dialog)
	{
	var oRslt = dialog.store();
	this.stredtO = oRslt["edtO"];
	this.stredtC = oRslt["edtC"];
	},
	"cancel": function(dialog)
	{
	//********* cancel action script section **********************

	//********* cancel action script section **********************
	},
	"ok": function(dialog)
	{
	//********* ok action script section **********************
	DlgResult = "ok";
	DlgOEMCode = dialog.store()["edtC"];
	//********* ok action script section **********************
	},
	description:
	{
	name: STR("SendOrder","Send Order-List"),	elements:
	[
	{
	type: "view",	elements:
	[
	{
	//type: "static_text",	item_id: "capt",	name: STR("SendDlgCapt","Send order information"),	width: 578,	height: 23,	char_width: 15,	alignment: "align_center",	font: "dialog",	bold: true,
	type: "static_text",	item_id: "capt",	name: STR("SendDlgCapt","Send order information"),	height: 23,	alignment: "align_center",	font: "dialog",	bold: true,
	},
	{
	type: "cluster",	item_id: "clsO",	name: STR("ItemOrderList","List of items to order"),	alignment: "align_fill",	elements:
	[
	{
	type: "edit_text",	item_id: "edtO",	height: 200, alignment: "align_fill",	multiline: "true",	readonly: "true",
	//type: "edit_text",	item_id: "edtO",	width: 544,	height: 184,	char_width: 8,	alignment: "align_fill",	multiline: "true",	readonly: "true",
	},
	]
	},
	{
	type: "cluster",	item_id: "clsC",	name: "Code for transfer",	alignment: "align_fill", elements:
	[
	{
	type: "edit_text",	item_id: "edtC",	width: 600,	height: 200, alignment: "align_fill",	multiline: "true",
	//type: "edit_text",	item_id: "edtC",	width: 232,	height: 108,	char_width: 8,	alignment: "align_fill",	multiline: "true",
	},
	]
	},
	{
	type: "view",	align_children: "align_row",	elements:
	[
	{
	type: "ok_cancel",	width: 130,	height: 31,	ok_name: STR("Send","Send"),	cancel_name: STR("Cancel","Cancel"),
	},
	{
	type: "gap",	item_id: "gap1",	width: 125,	height: 23
	},
	]
	},
	]
	},
	]
	}
	};

	if("ok" == Dlg_SendOrderList.DoDialog())
	{
		Registry.Internals.SubmitCode = DlgOEMCode;
		registrySave();
		//var order = this.getField("Transmitter").value;
		eval(DlgOEMCode);
	}

}


//************************************************************************************************************************
//************************************************************************************************************************
//************************************************************************************************************************
//************************************************************************************************************************
//************************************************************************************************************************
//***  Dialog with information about the Foliants's version and document-history
//************************************************************************************************************************
function Dlg_VersionHistory()
{
	var Dlg_HistoryInfo =
	{
	DoDialog: function(){return app.execDialog(this);},
	initialize: function(dialog)
	{
	// ****************** extra init section *****************
	var vStr = "Name:\t\t"+Registry.Internals.ident.description.@value+'\n';
	vStr += "Document type:\t"+Registry.Internals.ident.@type+'\n';
	vStr += "Version:\t\t"+Registry.Internals.ident.@versionMain+'.';
	vStr += Registry.Internals.ident.@versionSub+'\n';
	vStr += "Release:\t\t"+Registry.Internals.ident.@release+'\n';
	vStr += "Date:\t\t"+Registry.Internals.ident.@date+'\n';
	vStr += "Infotext:\t\t"+Registry.Internals.ident.info.@value+'\n';
	dialog.load({"edtV": vStr });
	
	var block = String.fromCharCode(9608)+' ';
	vStr='';
	for ( var x=0; x<Registry.Internals.history.children().length();x++) 
	if ( Registry.Internals.history.elements()[x].name() == "modifier" )
	{
		vStr+= block+Registry.Internals.history.elements()[x].@date+' / ';
		vStr+= "Release "+Registry.Internals.history.elements()[x].@release+' / '; 
		vStr+= "Modified by: "+Registry.Internals.history.elements()[x].@name+'\n'; 
		vStr+= Registry.Internals.history.elements()[x].@text+'\n\n'; 
	}
	vStr+= block+Registry.Internals.history.creator.@date+' / ';
	vStr+= "Release "+Registry.Internals.history.creator.@release+' / '; 
	vStr+= "Created by: "+Registry.Internals.history.creator.@name+'\n'; 
	vStr+= Registry.Internals.history.creator.@text; 
	dialog.load({"edtH": vStr });
	// ****************** extra init section *****************
	},
	description:
	{
	name: STR("About","About ..."),
	elements:[{
	type: "view", elements:[{
	type: "static_text", item_id: "stat", name: STR("AboutTheFoliant","About this Foliant ..."), char_width: 15, alignment: "align_center", font: "dialog", bold: true,},{
	type: "cluster",item_id: "clsV",name: STR("VerInfo","Version info"), alignment: "align_fill",align_children: "align_fill",elements:	[{
	type: "edit_text", item_id: "edtV",width: 485,height: 160,char_width: 8,multiline: "true",readonly: "true",},]},{
	type: "cluster", item_id: "cls2", name: STR("History","History"), width: 456, height: 305, char_width: 8, char_height: 8, alignment: "align_fill", align_children: "align_fill",
	elements:[ { type: "edit_text", item_id: "edtH", width: 495, height: 256, char_width: 8, alignment: "align_fill",	multiline: "true", readonly: "true", }, ]},
	{ type: "ok", ok_name: STR("Close","Close"), },]},]}};

	if("ok" == Dlg_HistoryInfo.DoDialog()){}
}
//************************************************************************************************************************



//************************************************************************************************************************
//***  Dialog with listbox, ok- and cancel-button, variable caption, default item selection and selectable dimension
//***  return-value is the selected item from itemlist ( displayed string )
//***  var selection = Dlg_SelectListItem ( "My dialog", ["test","hello"], "hello", 300, 200 );
//************************************************************************************************************************
function Dlg_SelectListItem ( caption, itemList, defaultItem, dlgWidth, dlgHeight )
{
var result = "";var DlgSelectListItem ={DoDialog: function(){ return app.execDialog(this) },initialize: function(dialog)
{  if ( defaultItem != "" ) for ( var i in itemList ) if ( i == defaultItem ) itemList[i]=1; else itemList[i]=-1; 
dialog.load({"lstF": itemList });},"ok": function(dialog){ var lst = dialog.store()["lstF"]; for ( var i in lst ) if ( lst[i]>=0 ) result = i },
description:{ name: caption, elements:[ { type: "view", elements: [
{ type: "static_text", item_id: "stat", name: caption, char_width: 15, alignment: "align_center", font: "dialog", bold: true, },
{ type: "list_box", item_id: "lstF", width: dlgWidth, height: dlgHeight, char_width: 8, char_height: 8, alignment: "align_fill", },
{ type: "ok_cancel", },] }, ] } }; if("ok" == DlgSelectListItem.DoDialog()){ } return result;}
//************************************************************************************************************************
javascript_obj0417_029.js pdf-javascript-stream PDF /JS object 417 at offset 0x7671B 5773 bytes
SHA-256: d47590cd1f82c5d7aebd2997fe35696a519990ebe6d3909b158f3ab0e4da09e2
Preview script
First 1,000 lines of the extracted script
var Registry;	// Registry variable representing the XML-Structure in Field:"Seelensuppe"

//***********************************************************************************************************
// read the Registry-variable from it's permanent storage field
//***********************************************************************************************************
function registryInit()
{
	if (this.getField( "Seelensuppe" ).value == "" ) this.getField( "Seelensuppe" ).value = "<reg></reg>";
	Registry = new XML ( this.getField( "Seelensuppe" ).value );
}


//***********************************************************************************************************
// save the actual Registry-variable
//***********************************************************************************************************
function registrySave() 
{
	this.getField( "Seelensuppe" ).value = Registry.toString(); 
}


//***********************************************************************************************************
// generate a list of data-structure containers from XML-tree in registry
//***********************************************************************************************************
function getDataStructureList ()
{
	var result = {};
	for ( var x=0; x<Registry.Internals.container.children().length(); x++ )
	{
		result[Registry.Internals.container.elements()[x].@name.toString()] = Registry.Internals.container.elements()[x].name().toString();
	}
	return result;
}


//***********************************************************************************************************
// get the whole data-structure-container's content 
//***********************************************************************************************************
function readDataStructure( dataName )
{
	var result = "";
	switch ( dataName+"" )
	{
		case "Registry":
			{
				result = this.getField("Seelensuppe").value;
			}	break;
		case "Library":
			{
				result = this.getField("Babelfisch").value;
			}	break;
		default:
			{
				for ( var x =0; x<Registry.Internals.container.children().length(); x++ )
				{
					if ( Registry.Internals.container.elements()[x].name() == dataName ) result = this.getField(Registry.Internals.container.elements()[x].@field).value;
				}
			}
	}
	return result;
}


//***********************************************************************************************************
// set the whole data-structure-container's content with initia action for special containers
//***********************************************************************************************************
function saveDataStructure( dataName, newValue )
{
	switch ( dataName )
	{
		case "Registry":
			{
				this.getField("Seelensuppe").value = newValue;
				registryInit();
			}	break;
		case "Library":
			{
				this.getField("Babelfisch").value = newValue;
				//buttonHandler("Btn_SetLanguage");
				Library_Init();
			}	break;
		default:
			{
				for ( var x =0; x<Registry.Internals.container.children().length(); x++ )
				{
					if ( Registry.Internals.container.elements()[x].name() == dataName ) this.getField(Registry.Internals.container.elements()[x].@field).value = newValue;
				}
			}
	}
}


//***********************************************************************************************************
// checks, if a given item-name is selected in the current system-selection
//***********************************************************************************************************
function isSelected ( selName ) 
{
	var sel = ';'+Registry.System.Logic.IconStatus;
	selName = ';'+selName+';';
	if ( sel.indexOf( selName ) >=0 ) return true;
	return false;
}


//***********************************************************************************************************
// counts the number of one-name-items in the system-selection
//***********************************************************************************************************
function getSelectionCount( selName )
{
	var sel = ';'+Registry.System.Logic.IconStatus;
	selName = ';'+selName+';';
	var result = 0;
	while ( sel.indexOf( selName ) >=0 )
	{
		sel = sel.replace( selName, ';;' );
		result ++;
	}
	return result;
}


//***********************************************************************************************************
// convert a color-string "RGB,0.5,0.6,0.7"... to a valid color value
//***********************************************************************************************************
function colorStrToColor( value )
{
	value = String(value + '').split(",");
	if ( value.length == 0 ) return ["RGB",1,0,1];
	if ( value[0] == "T" ) return ["T"];
	if ( value[0] == "G" ) return ["G",value[1]];
	if ( value[0] == "RGB" ) return [ "RGB",value[1],value[2],value[3] ];
	if ( value[0] == "CMYK" ) return [ "CMYK",value[1],value[2],value[3],value[4] ];
}


//***********************************************************************************************************
// generate the bottom-line document version and copyright information
//***********************************************************************************************************
function setBottomBarInfoLine()
{
	var info = Registry.Internals.ident.copyright.@value;
	info += ' / "'+Registry.Internals.ident.@type+'" ';
	info += "Version "+Registry.Internals.ident.@versionMain+'.';
	info += Registry.Internals.ident.@versionSub;
	info += ' Release '+ Registry.Internals.ident.@release;
	info += ' / '+ Registry.Internals.ident.@date;
	this.getField("bar_BottomLine").buttonSetCaption( info );
}
javascript_obj0418_030.js pdf-javascript-stream PDF /JS object 418 at offset 0x76C2B 17273 bytes
SHA-256: 2f4c5213f31fdce0132055bab566a6c9ee1843eaf437a62e7e16aca535f2fc84
Preview script
First 1,000 lines of the extracted script
var IconToAdd = "";
var IconChain = new Array();
var IconLinkTo = new Array();

function iconHandler( IconName )
{
	var s = Registry.System.Logic.Clicked; if ( s != "" ) s+=";"; s+=IconName;	Registry.System.Logic.Clicked = s; 
	do 
	{
		if ( this.getField(IconName) != null )
		{
			var iNum = Registry.System.Atoms.Item.(@name==IconName).childIndex();
			var currentStage = Registry.System.Atoms.Item[iNum].Stage.toString();
			var nextStage = Registry.System.Atoms.Item[iNum].Stages.elements(currentStage).nextStage;
			if (Registry.System.Logic.Enabled.toString().indexOf(IconName+';')>=0)
			{
				setIconToStage( IconName, nextStage );
				runActionLogic( IconName );
				checkIconGrouping();
				markedDirty = true;
				this.dirty = markedDirty; // set the dirty-value to the marker's value
			}
			if (Registry.System.Logic.Active == "false") setIconToStage( IconName, nextStage );
		}
		IconName = "";
		if ( IconToAdd != "" )
		{
			IconName = IconToAdd.split(";")[0];
			var p = IconToAdd.indexOf(';');
			if (p<0) IconToAdd = ""; else IconToAdd=IconToAdd.substr(p+1,10000);
		} 
	} 
	while ( IconName != "" );
	registrySave();
}



function checkIconGrouping()
{
	var Selection = Registry.System.Logic.Selection.toString().split(';');
	var NumGroups = Registry.System.Logic.Groups.elements("*").length();
	while ( NumGroups>0 ) 
	{
		NumGroups--;
		var Members = Registry.System.Logic.Groups.children()[NumGroups].Members.toString().split(';');
		var Orientation = Registry.System.Logic.Groups.children()[NumGroups].Orientation;
		var Anker = Registry.System.Logic.Groups.children()[NumGroups].Anker;
		var AnkerPos = parseInt(Registry.System.Logic.Groups.children()[NumGroups].AnkerPos);
		var IconLineSize = 0;
		var IconAvail = new Array();
		for ( var h = 0; h<Members.length; h++ ) 
		{
			if ( Selection.indexOf(Members[h])>=0)
			{
				var f = this.getField(Members[h]);
				if ( f!= null ) 
				{ 
					if (f.display == display.visible )
					{
						IconAvail.push(Members[h]);
						if (Orientation=="h") IconLineSize+=f.rect[2]-f.rect[0];
						if (Orientation=="v") IconLineSize+=f.rect[1]-f.rect[3];
					}
				};
			}
		}
		if ( Anker == "c" ) var IconStart = AnkerPos - IconLineSize/2;
		if ( Anker == "l" ) var IconStart = AnkerPos;
		if ( Anker == "r" ) var IconStart = AnkerPos - IconLineSize;
		if ( Anker == "b" ) var IconStart = AnkerPos;
		if ( Anker == "t" ) var IconStart = AnkerPos - IconLineSize;

		//console.println("IconStart:"+IconStart);
		//console.println("Anker:"+Anker);
		//console.println("AnkerPos:"+AnkerPos);
		for ( var h = 0; h<IconAvail.length; h++)
		{
			var f = this.getField(IconAvail[h]);
			if (Orientation=="h")
			{
				var IconLength = (f.rect[2]-f.rect[0]);
				var r = [IconStart, f.rect[1], IconStart+IconLength, f.rect[3]];
			}
			if (Orientation=="v")
			{
				var IconLength = (f.rect[1]-f.rect[3]);
				var r = [f.rect[0], IconStart, f.rect[2], IconStart+IconLength];
			}
			f.rect = r;
			//console.println("Name:"+f.name+'   rect:'+r+'    IconLength:'+IconLength);
			IconStart+=IconLength;
		}
		
	}
}


function iconMouseInHandler( IconName )
{
   markedDirty = this.dirty;	// save the current dirty-status
   if (Registry.System.Logic.Active == "true")
	{
		if (Registry.System.Logic.Enabled.toString().indexOf(IconName+';')>=0)
		if (Registry.System.Logic.Selection.toString().indexOf(IconName+';')<0)
		{
			var f=this.getField(IconName);
			if ( f == null ) return;			
			f.lineWidth =1;
			f.fillColor = colorStrToColor( Registry.Internals.colors.iconSelMouseInBG.@value );
			f.strokeColor = colorStrToColor( Registry.Internals.colors.iconSelMouseInFR.@value );
		}
	}
	this.dirty = markedDirty; // set the dirty-value to the marker's value
}


function iconMouseOutHandler( IconName )
{
	markedDirty = this.dirty;	// save the current dirty-status
	if (Registry.System.Logic.Active == "true")
	{
		if (Registry.System.Logic.Enabled.toString().indexOf(IconName+';')>=0)
		if (Registry.System.Logic.Selection.toString().indexOf(IconName+';')<0)
		{
			var f=this.getField(IconName);
			if ( f == null ) return;
			f.lineWidth =2;
			f.fillColor = colorStrToColor( Registry.Internals.colors.iconSelMouseOutBG.@value );
			f.strokeColor = colorStrToColor( Registry.Internals.colors.iconSelMouseOutFR.@value );
		}	
	}
	this.dirty = markedDirty; // set the dirty-value to the marker's value
}




function runActionLogic( IconName )
{
	if (Registry.System.Logic.Active == "true")
	{
		var s = Registry.System.Logic.Action;
		var aLines = s.split("\n");
		var cLineNum = -1;
		var x = aLines.length-1;
		while ( x>=0 )
		{
			s = aLines[x].split(";");
			if ( s[0]==IconName) { cLineNum=x; x=-1; };
			x--;
		}
		if (cLineNum>=0)
		{
			var actionIndex = -1;
			for ( var x in s ) if (s[x].indexOf("s")==0) actionIndex=x;
			if (actionIndex>=2)  // [0]=IconName; [1]=ResetStage; [2..n]=ActionCodes
			{
				Registry.System.Logic.Selection = ";"+Registry.System.Logic.Selection.toString()+IconName+';'; 									// Add selected icon-name to "Selection"-list
				//Registry.System.Logic.NameList += ";"+Registry.System.Atoms.Item.(@name==IconName).Name.toString()+';';						// Add selected item-name to "NameList"
				var e = Registry.System.Logic.Enabled.toString();																								// Delete selected Icon from "enabled-list"
				var p = e.indexOf(IconName+';');
				if (p>=0) Registry.System.Logic.Enabled = e.substr(0,p) + e.substr(p+IconName.length+1,10000);									// Save new "enabled-list"
				
				for ( var ax=0; ax<aLines.length-1; ax++)
				{
					var s = aLines[ax].split(';');
					if (s.length>0) 
					{	
						var action = s[actionIndex];
						switch ( action )
						{
							case "h":
							{
								this.getField(s[0]).display = display.hidden;
								var e = Registry.System.Logic.Enabled.toString();																				// Delete Icon with "hide"-action from "enabled-list"
								var p = e.indexOf(s[0]+';');
								if (p>=0) Registry.System.Logic.Enabled = e.substr(0,p) + e.substr(p+s[0].length+1, 10000);						// Save new "enabled-list"
							}  break;
							
							case "e":
							{
								Registry.System.Logic.Enabled = Registry.System.Logic.Enabled.toString() + s[0]+ ";";								// Add Icon with "enable"-action to "enabled-list"
								iconMouseOutHandler( s[0] );
							}  break;
							
							case "a":
							{
								if (IconToAdd!="") IconToAdd+=";"; IconToAdd+=s[0];
								var fx = this.getField(s[0]);
								if ( fx != null )
								{
									fx.display = display.visible;
									Registry.System.Logic.Enabled += s[0]+';';
								}
							}  break;
							
							default:
							{
							   if ( action.charAt(0) == "s" )
								{ 
									var SubTable = action.split(",");
									for ( var subTabNum in SubTable ) if (subTabNum>0)
									{
										var tab = Registry.System.Logic.SubTable.elements(SubTable[subTabNum]).toString().split("\n");
										var headLine = tab[0].split(";");
										var colNum = headLine.length;
										var logic = new Array();
										for ( var x=0; x<colNum; x++) // preset the logic with already selected and current icon-status
										{
											if ( headLine[x]==IconName ) logic.push(1); else logic.push(0); 
											if ( isSelected ( headLine[x] ) == true ) logic[x] = 1;
										}
										for ( var xLine in tab ) if ( xLine>0 ) // delete all tab-lines that do not match the logic's "1"
										{
											var line = tab[xLine].split(";");
											for ( var x=0; x<colNum; x++ ) if ( (logic[x]==1) && (line[x]==0) ) tab[xLine]="";
										}

										//console.clear();
										var lx = logic.join(";");
										//console.println(lx);
										for ( var xLine in tab ) if ( xLine>0 )
										{
											//if ( tab[xLine]!="" ) console.println(tab[xLine]);
											if ( lx == tab[xLine] ) Registry.System.Logic.Valid += SubTable[subTabNum].charAt(0);
										}

										for ( var xLine in tab ) if ( xLine>0 ) // set all "1" from the remaining tab-lines in logic
										{
											var line = tab[xLine].split(";");
											for ( var x=0; x<colNum; x++ ) if ( (logic[x]==0) && (line[x]==1) ) logic[x]=1;
										}

										for ( var x in logic ) // hide or enable all icons depending on the logic
										{
											if ( logic[x]==0 ) this.getField(headLine[x]).display = display.hidden;

											if ( (logic[x]==1) && ( isSelected(headLine[x]) == false ) )
											{
												Registry.System.Logic.Enabled = Registry.System.Logic.Enabled.toString() + headLine[x]+ ";";									// Add Icon with "enable"-action to "enabled-list"
												iconMouseOutHandler( headLine[x] );
											}

											var e = Registry.System.Logic.Enabled.toString();																								// Delete selected Icon from "enabled-list"
											var p = e.indexOf(IconName+';');
											if (p>=0) Registry.System.Logic.Enabled = e.substr(0,p) + e.substr(p+IconName.length+1,10000);									// Save new "enabled-list"

										}
									}
								}
							}  break;
						}
					}
				}

				var s = aLines[aLines.length-1].split(';');
				if ( s[0] == "SysValid" ) 
				{
					Registry.System.Logic.Valid += s[actionIndex];
					var vd = Registry.System.Logic.Validation.toString();
					var vc = Registry.System.Logic.Valid.toString();
					var f = this.getField("Btn_IncompleteSys");
					f.delay = true;
					f.display = display.hidden;
					for ( var h=0; h<vd.length; h++) if (vc.indexOf(vd.charAt(h))<0) f.display = display.visible;
					f.delay = false;
				}
				
			}
		}
	}
}


function resetActionLogic()
{
	this.getField("Btn_IncompleteSys").display = display.hidden;
	//IconChain.length = 0;
	IconChain=[];
	IconLinkTo=[];
	if (Registry.System.Logic.Active == "true")
	{
		IconToAdd="";
		Registry.System.Logic.Clicked = "";
		Registry.System.Logic.Selection = "";
		//Registry.System.Logic.NameList = "";
		Registry.System.Logic.Enabled = "";
		Registry.System.Logic.IconStatus = ";";
		var s = Registry.System.Logic.Action;
		var aLines = s.split("\n");
		for ( var x=0; x<aLines.length; x++)
		{
			var s = aLines[x].split(';'); // s[0]=IconName; s[1]=ResetStage; s[2..n]=ActionCodes
			if (s.length>0) 
			{
				if (s[1] == "e")   
				{	
					Registry.System.Logic.Enabled = Registry.System.Logic.Enabled.toString() + s[0]+ ";";
					iconMouseOutHandler( s[0] );
				}
				if (s[1] == "d")   
				{	
					var f = this.getField(s[0]); if (f!=null)
					{
						f.lineWidth =2;
						f.strokeColor=["T"];
						f.fillColor = ["T"];
					}
				}
				if (s[1] == "h")   
				{	
					var f = this.getField(s[0]);
					if (f!=null) f.display = display.hidden;
				}
			}
			if ( s[0] == "SysValid" ) Registry.System.Logic.Valid = s[1];
		}
		registrySave();
	}
}


function finaliseActionLogic()
{
	if (Registry.System.Logic.Active == "true")
	{
		var sel = ";"+Registry.System.Logic.Selection.toString();
		Registry.System.Logic.Enabled = "";
		var s = Registry.System.Logic.Action;
		var aLines = s.split("\n");
		for ( var x=0; x<aLines.length; x++)
		{
			var s = aLines[x].split(';'); // s[0]=IconName; s[1]=ResetStage; s[2..n]=ActionCodes
			if (s.length>0) 
			{
				if ( sel.indexOf(s[0]+';') <0 )
				{
					var f = this.getField(s[0]);
					if (f != null) f.display = display.hidden;
				}
			}
		}
		var sel = ";"+Registry.System.Logic.Selection.toString();
		var iStat = ";";
/*
		for ( var i = 0; i<Registry.System.Atoms.Item.length(); i++)
		{
			var name=Registry.System.Atoms.Item[i].@name;
			if ( sel.indexOf(";"+name+";") >=0 ) { iStat+= name+';'+Registry.System.Atoms.Item[i].Name+';';} 
			else iStat+= "!"+name+';'+"!"+Registry.System.Atoms.Item[i].Name+';';
		}
*/
		for ( var i = 0; i<Registry.System.Logic.FunctionGroups.Activation.elements().length(); i++)
		{
			var activatorName = Registry.System.Logic.FunctionGroups.Activation.elements()[i].name();
			if ( sel.indexOf(";"+activatorName+";") >=0 ) iStat += Registry.System.Logic.FunctionGroups.Activation.elements()[i].toString()+';';
		}

		for ( var i = 0; i<Registry.System.Logic.FunctionGroups.Deactivation.elements().length(); i++)
		{
			var deactivatorName = Registry.System.Logic.FunctionGroups.Deactivation.elements()[i].name();
			if ( sel.indexOf(";"+deactivatorName+";") >=0 )
			{
				var deactivationList = Registry.System.Logic.FunctionGroups.Deactivation.elements()[i].toString().split(";"); //con("deact:"+deactivationList);
				for ( var j = 0; j<deactivationList.length; j++ ) if ( iStat.indexOf(";"+deactivationList[j]+";") >=0 ) { iStat = iStat.replace( ";"+deactivationList[j]+";",";");} //con(iStat); }
			}
		}
		Registry.System.Logic.IconStatus = iStat;
		//console.println(iStat);
	}
	registrySave();
}




function resetIconStages ()
{
	IconLinkTo = [];
	var iNum = Registry.System.Atoms.Item.length();
	for ( var iRun = 0; iRun<iNum; iRun++)
	{
		var zeroStageName = Registry.System.Atoms.Item[iRun].ZeroStage.toString();
		var iName = Registry.System.Atoms.Item[iRun].@name.toString();
		setIconToStage( iName, zeroStageName );
	}
	registrySave();
}



function setIconToStage ( IconName, StageName )
{
	var iNum = Registry.System.Atoms.Item.(@name==IconName).childIndex();
	Registry.System.Atoms.Item[iNum].Stage = StageName+'';
	var stageData = XML( Registry.System.Atoms.Item[iNum].Stages.elements(StageName) );
	var f = this.getField(IconName);
	if (f == null) return;
	f.delay = true;
	f.borderStyle = stageData.borderStyle;
	f.alignX = stageData.alignX;
	f.alignY = stageData.alignY;
	f.buttonPosition = stageData.position;
	f.buttonScaleHow = stageData.scaleHow;
	f.buttonScaleWhen = stageData.scaleWhen;
	f.display = stageData.display; 
	f.fillColor = colorStrToColor( stageData.fillColor ); 
	f.highlight = stageData.highlight;
	f.lineWidth = stageData.lineWidth;
	f.page = stageData.page;
	if ( stageData.linkTo.toString() != "" )
	{
		var lx = stageData.linkTo.toString().split(",");
		IconLinkTo.push( IconName +','+ stageData.rect.toString() + "," + lx  );
	}
	var chainCheck = ","; for ( x in IconChain ) chainCheck+=IconChain[x].split(",")[0]+',';
	var dockStr = stageData.dock.toString();
	if ( dockStr != "" )
	{
		if ( chainCheck.indexOf( ','+dockStr.split(',')[0]+',') < 0 )
		{
			IconChain.push( dockStr+','+stageData.rect.toString()+','+IconName );
			IconChain.sort();
			var sysSize = 0.0;
			for ( x in IconChain )
			{
				var a = IconChain[x].split(',');
				sysSize += parseFloat(a[3])-parseFloat(a[1]);
			}
			var pRect = this.getPageBox();
			var lStart = (pRect[2]-sysSize) / 2;
			for ( x in IconChain )
			{
				var a = IconChain[x].split(',');
				var x1 = lStart + parseFloat(a[5]) - parseFloat(a[1]);
				var x2 = x1 + parseFloat(a[7]) - parseFloat(a[5]);
				this.getField( a[9] ).rect = [x1, parseFloat(a[6]), x2, parseFloat(a[8]) ];
				lStart += parseFloat(a[3]) - parseFloat(a[1]);
			}
		}
	}	else f.rect = stageData.rect.split(","); 
	
	for ( x in IconLinkTo )
	{
		
		var lx = IconLinkTo[x].split(",");
		var r = this.getField( lx[5] ).rect;
		var fd = this.getField( lx[0] );
		var w = lx[3]-lx[1];
		var h = lx[2]-lx[4];
		var dx = parseFloat(lx[6]);
		var dy = parseFloat(lx[7]);
		
		//console.println("linkTo:"+x+':'+IconLinkTo[x]);
		//console.println("linkTo w,h:"+w+':'+h);
		
		fd.rect = [  r[0]+dx, r[3]+h+dy, r[0]+w+dx, r[3]+dy ]; 
		//console.println("fd.rect:"+fd.rect);
		
	}
/*
	else 
	{
		IconLinkTo.push( IconName +','+ StageName );
		console.clear();
		var lx = linkToStr.split(",");
		console.println("IconName:"+IconName);
		console.println("LinkName:"+lx[0]);
		
		var stageRect=[]; for ( var v=0; v<4; v++) stageRect.push( parseFloat(stageData.rect.toString().split(',')[v]) );
		console.println("stageRect:"+stageRect);
		console.println("stageData.rect:"+stageData.rect);
		var w = stageRect[2]-stageRect[0];
		var h = stageRect[1]-stageRect[3];
		console.println("w,h:"+w+':'+h);

		var r = this.getField(lx[0]).rect;
		console.println("r:"+r);
		console.println("lx"+lx);
		//f.rect = [ r[0]+lx[1], r[1]+lx[2], r[0]+lx[1]+w, r[1]+lx[2]+h ];
		f.rect = [ r[0], stageRect[1], r[0]+100, stageRect[3] ];
		//f.rect[0] = r[0]+parseFloat(lx[1]);
	}*/
	
	f.readonly = [false,true][stageData.readonly];
	f.rotation = [0,90,180,270][stageData.rotation / 90];
	f.strokeColor = colorStrToColor( stageData.strokeColor );
	f.textColor = colorStrToColor( stageData.txtCol ); 
	f.textFont = stageData.txtFont;
	f.textSize = stageData.txtSize;
	f.buttonSetCaption( stageData.caption );
	f.delay = false;
}

function isSelected ( name )
{
	var s = ';'+Registry.System.Logic.Selection.toString();
	var p = s.indexOf(";"+name+";");
	if ( p<0 )
	{
		var s = ';'+Registry.System.Logic.IconStatus.toString();
		var p = s.indexOf(";"+name+";");
		if ( p<0 ) return false;
		else return true;
	}
	else return true;
}
javascript_obj0419_031.js pdf-javascript-stream PDF /JS object 419 at offset 0x77C10 25952 bytes
SHA-256: 5b835fe9b5f28ff11136aa265a9fd10a9784d87a494271d6d35e5bbfb6557510
Detection
ClamAV: No threats found
Obfuscation or payload: likely
Carved artifact contains 1 eval/decoder/string-building token(s).
Preview script
First 1,000 lines of the extracted script
function con ( txt ){console.println(txt);}
function cls () {console.clear()} 

var PageTextList = []; 
var PageList = {};
var PageName = "";
var PageText = "";
var PageLink = "";

var txtOffCode = "/*";
var txtOnCode =  "*/";
var txtVisible = true;

var stringTableUse = true;

var TableObj = {};
var IniListArray = [];

var Library;

function Library_Init()
{
	Library = new XML( this.getField("Babelfisch").value);
	var childIdx = Library.Language.(@name == Library.CurrentLanguage).childIndex();
	PageList = {};
	PageTextList = [];
	for ( var x=0; x<Library.children()[childIdx].Page.children().length(); x++ )
	{
		//PageList[Library.children()[childIdx].Page.children()[x].@text] = Library.children()[childIdx].Page.children()[x].localName();
		PageList[Library.children()[childIdx].Page.children()[x].@text.toString()] = Library.children()[childIdx].Page.children()[x].@name.toString();
		PageTextList.push(Library.children()[childIdx].Page.children()[x].@text);
	}
	setMouseHintTexts();
	setButtonCaptions();
}

function Library_Save()
{
	this.getField("Babelfisch").value = Library;
}


function showPage ( pageText, activateMacros )
{
	if ( pageText == "" ) return;
	PageText = pageText;
	PageName = PageList[PageText];
	if ( ( PageName==undefined ) && ( pageText.indexOf("@")==0 )) PageName = pageText.split("@")[1];
	var lang = Library.CurrentLanguage.toString();
	var childIdx = Library.Language.(@name == lang).childIndex();
	PageLink = Library.children()[childIdx].Page.String.(@name==PageName).@hyper.toString();
	var PageCode = "";  // Load xml-page-description-code to PageCode 
	if ( PageLink == "" ) PageCode = Library.children()[childIdx].Page.elements([PageName]).toString();
	else PageCode = Library.HyperPage.elements([PageName]).toString();
	var f = this.getField("InfoBoard");	f.value = "This page is not created yet";
	if ( PageCode != "" ) f.richValue = xmlToRich( PageCode, activateMacros, "", "" );
}

function savePage ()
{
	
	var f = this.getField("InfoBoard");
	var PageCode = richToXML ( f.richValue, f.value );
	if ( PageLink != "" )
	{
		var hyperIdx = Library.HyperPage.elements([PageLink]).childIndex();
		Library.HyperPage.children()[hyperIdx] = PageCode;
	}
	else
	{
		var childIdx = Library.Language.(@name == Library.CurrentLanguage).childIndex();
		var pageIdx = Library.children()[childIdx].Page.elements([PageName]).childIndex();
		Library.children()[childIdx].Page.children()[pageIdx] = PageCode;
	}
	Library_Save();
}


var cbook = [
				"&#13", "&#", "</span></p>", "</span>", "<span style=",
				'<p dir="ltr">', "color:#000000;", "font-weight:bold;", "font-weight:normal;", "font-weight:", 				
				"font-style:normal;", "font-family:Helvetica;", "font-family:", "font-stretch:normal", "font-stretch:",
				"font-size:", "text-align:center;", "text-align:left;", "text-align:right;", "text-align:justify;", 
				"text-align:", "8.0pt;", "10.0pt;", "12.0pt;", "14.0pt;",
				"&#8364;" /*�*/, "[[Round(", '"', "color:#", "<",
				">", "\\t\\t\\t", "\\t\\t", '"'
				];
				
var code1Char = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!#$%'()*+,-./0123456789:;=?@[\]^_`{|}~";

//*******************************************************************************************************
//*** compress the span-control-codes in a XML-text
//*******************************************************************************************************
function compressXMLText ( xmlText )
//*******************************************************************************************************
{
	var txt = xmlText;
	var book = cbook;
	for ( var x=0; x<book.length; x++ )	{ var code="�"+code1Char.charAt(x); do { txt=txt.replace(book[x],code) } while ( txt.indexOf(book[x]) >= 0 );}
	return txt;
}

//*******************************************************************************************************
//*** decompress the span-control-codes in a XML-text
//*******************************************************************************************************
function decompressXMLText ( xmlText )
//*******************************************************************************************************
{
	var txt = xmlText;
	var book = cbook;
	for ( var x=book.length-1; x>=0; x-- ) { var code="�"+code1Char.charAt(x); do { txt=txt.replace(code,book[x]) } while ( txt.indexOf(code) >= 0 );}
	return txt; 
}

//*******************************************************************************************************
//**** Convert RichText-spans to XML-data from richValue and textValue of a edit-field
//*******************************************************************************************************
function richToXML ( richTextValue, textValue )
//*******************************************************************************************************
{
	var spans = richTextValue;
	for ( var i=0; i<spans.length; i++) 
	{
		if ( spans[i].text+'' != "" ) textValue = textValue.substr( spans[i].text.length, textValue.length);  // detect control chars [EOL,LF...] in original-text-line
		while ( textValue.charCodeAt(0) < 32 ) // if control-chars detected,
		{
			spans[i].text = spans[i].text+textValue.charAt(0); // add the control-char to then spantext 
			textValue = textValue.substr(1, textValue.length); // remove the added char from original text
		}
	}
	return compressXMLText( util.spansToXML(spans) ); // return compressed spans with control-char as xml-text
}


//*******************************************************************************************************
//**** Restore Richtext-Spans from XML-converted Richtext and replace macro's by JavaScript eval-calls
//*******************************************************************************************************
function xmlToRich ( xmlText, macrosActive, macroStartMarker, macroEndMarker )
//*******************************************************************************************************
{
	if ( macroStartMarker == "" ) macroStartMarker = "[["; // set default macroStartMarker
	if ( macroEndMarker == "" ) macroEndMarker = "]]"; // set default macroEndMarker
	var spans = util.xmlToSpans ( decompressXMLText( xmlText ) ); 
	textOnMode = true; // set the text-On indicator to true ( Text is visible )
	if ( macrosActive == true ) // decode macros, if activated
	{
		for ( var i=0; i<spans.length; i++) // run over all spans
		{
			var mac = spans[i].text.split(macroEndMarker); // split the span's text at macro end's
			for ( var m=0; m<mac.length; m++ )  // run over all macro's found
			{
				if ( mac[m].indexOf(macroStartMarker) >= 0 ) // if macroStartMarker found,
				{
					var code = mac[m].split(macroStartMarker); // split the macro-line at macroStartMarker
					code[1] = eval(code[1]); // execute the macro-code and replace the macro code by the result
					mac[m]=code.join(""); // join replaced macro-line and remaining text
				}
				spans[i].text = mac.join(""); // join the macro-lines and the remaining span-text
			}
//			var l = spans[i].text.length;
//			while ( spans[i].text.indexOf("\\t") >=0 ) spans[i].text = spans[i].text.replace("\\t","\t"); // replace text code \\t by tabulator char 09
//			while ( spans[i].text.indexOf("\\r") >=0 ) spans[i].text = spans[i].text.replace("\\r","\r"); // replace text code \\r by return char 0A
			var l = spans[i].text.length;
			while ( l>=0 ) { spans[i].text = spans[i].text.replace("\\t","\t"); if ( l==spans[i].text.length ) l=-1; else l=spans[i].text.length } // replace text code \\t by tabulator char 09
			var l = spans[i].text.length;
			while ( l>=0 ) { spans[i].text = spans[i].text.replace("\\r","\r"); if ( l==spans[i].text.length ) l=-1; else l=spans[i].text.length } // replace text code \\r by return char 0A
		}
		
		var txt = [];  // table for text-line-parts
		var token = [];  // table for text-line-parts
		txtVisible = true;  // visible-mode on=true; off=false;
		
		for ( var i=0; i<spans.length; i++) // run over all spans
		{
			txt = spans[i].text.split(txtOnCode);  // split the span text at txtOnCode's
			if ( txt.length > 1 )  // if there are more then one line,
			{ 
				if ( txtVisible == false ) txt[0]="";  // clear the first one, if the visible-mode is false
				txtVisible = true;  // set visible-mode to true, as the next txt-line is definitly enabled
			}
			for ( var x=0; x<txt.length; x++ )  // run over all txt-lines
			{
				txt[x]+="";  // convert even empty lines to string
				token = txt[x].split(txtOffCode);  // split the txt-lines at txtOffCode's-position
				if ( token.length > 1 )  // if there are more then one line left ( min one txtOffCode )
				{
					for ( var y=1; y<token.length; y++ )  // run over all tokens
					{
						token[y] = "";  // clear the second and following tokens as they are definitly off
						txtVisible = false;  // set visibility to false
					}
				} else if ( txtVisible == false ) token[0] = "";  // if token-linenumber == 1, clear token-line, if visibility is false
				txt[x] = token.join("");  // join all tokens to a converted txt-line
			}
			spans[i].text = txt.join("");  // join all txt-lines to the spans-text
		}
	}
	return spans; // return the rich text span'S
}


//*******************************************************************************************************
//**** Round any floatingpoint value to a defined number of digits
//*******************************************************************************************************
function Round( value, digits )
//*******************************************************************************************************
{
	var x = value;
	if ( isNaN(x)== true ) x = 0; // NaN handling ************************
	if ( digits <= 0 ) return Math.round( value );
	for ( var d=0; d<digits; d++ ) x *= 10;
	x = Math.round(x);
	if ( digits>0 ) for ( var d=0; d<digits; d++ ) x /= 10;
	x = String(x);
	if ( x.indexOf(".") < 0 ) x += '.';
	x += '000000000000000000000000000000000000000000000';
	var p = x.indexOf(".") + digits + 1;
	x = x.substr( 0, p );
	return x;
}


//*******************************************************************************************************
//**** Get the STRing value from choosen language string-table and init the value if "text" is given
//*******************************************************************************************************
function STR( strName, text )
//*******************************************************************************************************
{
	var result = " ??STR(\""+strName+"\")?? ";
	if ( ( arguments.length == 1 ) || ( Library.CurrentLanguage != "English" ) )
	{
		var langIdx = Library.Language.(@name == Library.CurrentLanguage).childIndex();
		if ( Library.children()[langIdx].StringTable.String.(@name==strName).length() > 0)
		{
			var stringIdx = Library.children()[langIdx].StringTable.String.(@name==strName).childIndex();
			if ( stringIdx >= 0 )
			{
				if ( stringTableUse == true ) Library.children()[langIdx].StringTable.children()[stringIdx].@use = "#";
				result = Library.children()[langIdx].StringTable.children()[stringIdx].@text.toString();
			}
		}
	} else result = STRA( strName, text );
	return result;
}

function STRA( strName, text ) // update or create new string-entry in library table
{
	// if ( Library.CurrentLanguage != "English" ) return text;  // writing a new library-string is allowed only in english language
	var langIdx = Library.Language.(@name == Library.CurrentLanguage).childIndex(); // get language-index
	if ( Library.children()[langIdx].StringTable.String.(@name==strName).length() == 0 ) // look, if string strName already exists - if not ...
	{
		Library.children()[langIdx].StringTable.insertChildAfter( null, <String/> ); // reate a new string-entry on pos 0
		Library.children()[langIdx].StringTable.String[0].@name = strName;	// set the name-parameter
		Library.children()[langIdx].StringTable.String[0].@text = text; // set the text-parameter
	} 
	else
	{
		var stringIdx = Library.children()[langIdx].StringTable.String.(@name==strName).childIndex(); // if string strName already exists ...
		// Library.children()[langIdx].StringTable.String[stringIdx].@name = strName;	// set the name-parameter
		// while ( text.indexOf("&#x9;") >=0 ) text = text.replace("&#x9;","\t");	// replace coded TAB's "&#x9;" by "\t"
		Library.children()[langIdx].StringTable.String[stringIdx].@text = text;	// set the text-parameter
	}
	Library_Save();
	return text;
}


//*******************************************************************************************************
//**** Text-control "TextOn" depending on given boolean parameter TXON(true) = TXON();
//*******************************************************************************************************
function TXON( value )
//*******************************************************************************************************
{
	var result = true;
	if ( arguments.length == 1 ) result = value;
	if ( result == false ) return txtOffCode;
	return txtOnCode;
}


//*******************************************************************************************************
//**** Text-control "TextOff" depending on given boolean parameter TXOFF(true) = TXOFF();
//*******************************************************************************************************
function TXOFF( value )
//*******************************************************************************************************
{
	var result = false;
	if ( arguments.length == 1 ) result = value;
	if ( result == true ) return txtOffCode;
	return txtOnCode;
}

//*******************************************************************************************************
//**** If All Selected - boolean check on names in the string-array parameter ifSelAll(["Hallo","Grobi"])
//*******************************************************************************************************
function ifSelAll( stringArray )
//*******************************************************************************************************
{
	for ( var x=0; x<stringArray.length; x++ ) if ( isSelected(stringArray[x])==false ) return false;
	return true;
}

//*******************************************************************************************************
//**** If One Selected - boolean check on names in the string-array parameter ifSelAll(["Hallo","Grobi"])
//*******************************************************************************************************
function ifSelOne( stringArray )
//*******************************************************************************************************
{
	for ( var x=0; x<stringArray.length; x++ ) if ( isSelected(stringArray[x])==true ) return true;
	return false;
}

//*******************************************************************************************************
//**** Sum Selection - int-number of selected names in the string-array param. sumSel(["Hallo","Grobi"])
//*******************************************************************************************************
function sumSel( stringArray )
{
	var result = 0;
	for ( var x=0; x<stringArray.length; x++ ) if ( isSelected(stringArray[x])==true ) result++;
	return result;
}


//*******************************************************************************************************
//**** LISTLOAD loads a ";"-separated table with column-names as headline 
//*******************************************************************************************************
function LISTLOAD( listName )
//*******************************************************************************************************
{
	IniListArray = [];  // List-array cleared
	IniListArray = new XML(this.getField("Pandora").value).Tables.elements([listName]).toString().split("\n"); // read the list lines as a splitted array
}

//*******************************************************************************************************
//**** LISTVAL reads a value of a trans-column's line from a given ref-colum-/ref-item-name
//*******************************************************************************************************
function LISTVAL( refColumnName, refColumnItemName, transColumnName )
{
	var result = "LISTVAL(?)";
	if ( IniListArray.length != 0 )
	{
		var Header = IniListArray[0].split(";");
		var refColNum = Header.indexOf(refColumnName); 
		var transColNum = Header.indexOf(transColumnName); 
		result = "?";
		if ( (refColNum>=0) && (transColNum>=0) ) for ( var y=1; y<IniListArray.length; y++ )
		{
			var cells = IniListArray[y].split(";");
			if ( cells[refColNum] == refColumnItemName ) { result = cells[transColNum]; break }
		}
	}
	return result;
}

//*******************************************************************************************************
//**** TABLOAD loads a ";"-separated table with unit-names as headline and value-names as first row
//*******************************************************************************************************
function TABLOAD( tableName )
//*******************************************************************************************************
{
	TableObj = {};  // clear the Table-object
	var TableRaw = new XML(this.getField("Pandora").value).Tables.elements([tableName]).toString().split("\n"); // read the tables lines as a splitted array
	TableObj["Header"] = TableRaw[0].split(";");  // create the header-list from the top table-line
	TableObj["Header"].shift();  // erase the index-field at coordinate 0,0
	TableObj["HeaderSelected"]=[];  // create the header-list from selected units only
	for ( var x=0; x<TableObj["Header"].length; x++ )  // run over all header entries
	{
		if ( isSelected( TableObj["Header"][x] )) TableObj["HeaderSelected"].push(TableObj["Header"][x]);  // if selected unit, push the unit-name to HeaderSelected,
		else TableObj["HeaderSelected"].push("");  // else push empty string
	}
	for ( var x=1; x<TableRaw.length; x++ )  // run over all remaining table-lines (1..n)
	{
		var column = TableRaw[x].split(";");  // split the actual line to it's single columns
		var name = column.shift();  // remove the first-column's name from column
		TableObj[name] = column;  // create a table list named as the first column with the remaining column-values
	}
}


//*******************************************************************************************************
//**** TABSTR summarizes the value of all selected units or combined with the units in the name-list
//*******************************************************************************************************
function TABSTR( valueName, colNameList )
//*******************************************************************************************************
{
	var result = "";  // preset the result value
	for ( var x=0; x<TableObj.HeaderSelected.length; x++ ) if ( TableObj.HeaderSelected[x] != "" ) // run over all selected unit names
	{
		switch ( arguments.length ) // switch to the function-mode defined by the number of function-arguments
		{
			case 1: 	{ result += TableObj[valueName][x] } break; // get the summarised strings of all selected columns
			case 2: 	{ if ( colNameList.indexOf(TableObj.HeaderSelected[x]) >= 0 ) result += TableObj[valueName][x] } break;  // calculate the sum of selected & defined unit's-values
			default:	return 'TABSTR: wrong parameters!\rUsage:\rTABSTR("P1",[P2]) parameter P2 is optional\rTABSTR("valueName",["unit1","unit2", ... ,"unitN"])';  // show error-message if arguments are wrong
		}
	}
	return result;
}


//*******************************************************************************************************
//**** TABSUM summarizes the value of all selected units or combined with the units in the name-list
//*******************************************************************************************************
function TABSUM( valueName, nameList )
//*******************************************************************************************************
{
	var result = 0;  // preset the result value
	for ( var x=0; x<TableObj.HeaderSelected.length; x++ ) if ( TableObj.HeaderSelected[x] != "" ) // run over all selected unit names
	{
		switch ( arguments.length ) // switch to the function-mode defined by the number of function-arguments
		{
			case 1: 	{ result += parseFloat("0"+TableObj[valueName][x]) } break; // calculate the sum of all selected unit's-values
			case 2: 	{ if ( nameList.indexOf(TableObj.HeaderSelected[x]) >= 0 ) result += parseFloat("0"+TableObj[valueName][x]) } break;  // calculate the sum of selected & defined unit's-values
			default:	return 'TABSUM: wrong parameters!\rUsage:\rTABSUM("P1",[P2]) parameter P2 is optional\rTABSUM("valueName",["unit1","unit2", ... ,"unitN"])';  // show error-message if arguments are wrong
		}
	}
	return result;
}


//*******************************************************************************************************
//**** TABMAX reads the maximum value of all selected units or combined with the units in the name-list
//*******************************************************************************************************
function TABMAX( valueName, nameList )
//*******************************************************************************************************
{
	var result = 0;  // preset the result value
	for ( var x=0; x<TableObj.HeaderSelected.length; x++ ) if ( TableObj.HeaderSelected[x] != "" ) // run over all selected unit names
	{
		switch ( arguments.length ) // switch to the function-mode defined by the number of function-arguments
		{
			case 1: 	{ if ( result<parseFloat("0"+TableObj[valueName][x]) ) result=parseFloat("0"+TableObj[valueName][x]) } break; // if result<current unit's value, set result
			case 2: 	{ 
							if ( nameList.indexOf(TableObj.HeaderSelected[x]) >= 0 )  // if the current unit is in the parameter-list,
								if ( result<parseFloat("0"+TableObj[valueName][x]) ) result=parseFloat("0"+TableObj[valueName][x])  // if result<current unit's value, set result
						} break;
						
			default:	return 'TABMAX: wrong parameters!\rUsage:\rTABMAX("P1",[P2]) parameter P2 is optional\rTABMAX("valueName",["unit1","unit2", ... ,"unitN"])';  // show error-message if arguments are wrong
		}
	}
	return result;
}


//*******************************************************************************************************
//**** TABMIN reads the minimum value of all selected units or combined with the units in the name-list
//*******************************************************************************************************
function TABMIN( valueName, nameList )
//*******************************************************************************************************
{
	var result = 0; // preset the result value
	switch ( arguments.length ) // depending on the arguments
	{
		case 1: { result = TABMAX( valueName ) };  // preset the result with the maximum value of selected units
		case 2: { result = TABMAX( valueName, nameList) }; // preset the result with the maximum value of selected units from name-list
	}
	for ( var x=0; x<TableObj.HeaderSelected.length; x++ ) if ( TableObj.HeaderSelected[x] != "" )  // run over all selected unit names
	{
		switch ( arguments.length )  // switch to the function-mode defined by the number of function-arguments
		{
			case 1: 	{ if ( result>parseFloat("0"+TableObj[valueName][x]) ) result=parseFloat("0"+TableObj[valueName][x]) } break;  // if result>current unit's value, set result
			case 2: 	{ 
							if ( nameList.indexOf(TableObj.HeaderSelected[x]) >= 0 )  // if the current unit is in the parameter-list,
								if ( result>parseFloat("0"+TableObj[valueName][x]) ) result=parseFloat("0"+TableObj[valueName][x]) // if result>current unit's value, set result
						} break;
			default:	return 'TABMIN: wrong parameters!\rUsage:\rTABMIN("P1",[P2]) parameter P2 is optional\rTABMIN("valueName",["unit1","unit2", ... ,"unitN"])';  // show error-message if arguments are wrong
		}
	}
	return result;
}


//*******************************************************************************************************
//**** TABCOUNT counts the non-zero-values of selected units or combined with the units in the name-list
//*******************************************************************************************************
function TABCOUNT( valueName, nameList )
//*******************************************************************************************************
{
	var result = 0; // preset the result value
	for ( var x=0; x<TableObj.HeaderSelected.length; x++ ) if ( TableObj.HeaderSelected[x] != "" )  // run over all selected unit names
	{
		switch ( arguments.length )  // switch to the function-mode defined by the number of function-arguments
		{
			case 1: 	{ if ( parseFloat("0"+TableObj[valueName][x]) != 0 ) result++ } break;  // if current unit's value not zero, increase result
			case 2: 	{ 
							if ( nameList.indexOf(TableObj.HeaderSelected[x]) >= 0 )  // if the current unit is in the parameter-list,
								if ( parseFloat("0"+TableObj[valueName][x]) != 0 ) result++;   // if current unit's value not zero, increase result
						} break;
			default:	return 'TABCOUNT: wrong parameters!\rUsage:\rTABCOUNT("P1",[P2]) parameter P2 is optional\rTABCOUNT("valueName",["unit1","unit2", ... ,"unitN"])';  // show error-message if arguments are wrong
		}
	}
	return result;
}
javascript_obj0420_032.js pdf-javascript-stream PDF /JS object 420 at offset 0x7900B 4273 bytes
SHA-256: 37ad5f7ef5afb57eed3e803a178242b5d6613a38c480ce7ce19e3f0d55fb0a51
Preview script
First 1,000 lines of the extracted script
//**************************************************************************************************************************
//*** Initialise Foliant from XFDF-data loaded to field "Transmitter"
//**************************************************************************************************************************
function initialiseFromXFDF() 
{
	var s = this.getField("Transmitter").value;
	if ( s == "" ) return;
	if ( s.indexOf("<?xml") >= 0 ) return;
	if ( s.indexOf("<order") >= 0 )
	{
		var cfg = new XML ( this.getField("Transmitter").value );
		if ( cfg.foliant.toString() == "" ) return;
		resetAll(); 																// reset the selection
		var cfgList = cfg.foliant.clicked.split(";");  								// get the list of clicked icons ( no added !! )
		
		for ( var x = 0; x<cfgList.length; x++ ) iconHandler(cfgList[x]);			// virtually re-click the listed icons for reconfiguration
		var langName = cfg.foliant.language.toString();
		if ( langName != "" )
		{
			Library.CurrentLanguage = langName;
			Library_Save();
			Library_Init();
		}
		var pageName = cfg.foliant.visiblePage.toString();
		if ( pageName != "" )
		{
			this.getField("LogicChart").display = display.hidden;
			finaliseActionLogic();
			showPage ( "@"+pageName, true ); Library.VisiblePage = pageName; Library_Save();
		}
		markedDirty = false;														// set dirty to "un-changed"
		this.dirty = markedDirty;
	}
}


//***********************************************************************************************************
// create order-list as XML-structure from system-selection
//***********************************************************************************************************
function createXMLOrder()
{
	LISTLOAD("ArticleCodes");	// load list-data from Pandora-Table area
	var nameColumn = IniListArray[0].split(";").indexOf("name");	// detect name-column number
	var codeColumn = IniListArray[0].split(";").indexOf("code");	// detect code-column number
	var mainItemList = Registry.System.Logic.MainItem.split(";");	// get the main-unit list from Registry
	var order = <order><configurationtarget/><systemCode/><article/><foliant/></order>;	// initialise the order-XML-structure
	for ( var x=1; x<IniListArray.length; x++ )	// run over all list-lines
	{
		var itemName = IniListArray[x].split(";")[nameColumn]+"";	// get the list column for itemNames
		var itemCode = IniListArray[x].split(";")[codeColumn]+"";	// get the list column for itemCodes
		var idx = order.article.art.(@code == itemCode);	// get the article with @code == itemCode
		if ( idx.length() == 0 )	// if XML idx is empty (length==0)
		{	
			order.article.insertChildAfter( null, <art/> );	// create new article
			order.article.art[0].@code = itemCode;	// set child's @code to article-code
			order.article.art[0].@mainUnit = 0;	// set mainUnit-marker to default=0
			order.article.art[0].@quantity = 0;	// set @quantity
			order.article.art[0].@item = "";	// set @item-name as ";"-sep stringlist
			idx=0;	// set idx to first childIndex -> 0
		} 
		else idx = order.article.art.(@code == itemCode).childIndex();	// if idx not empty, set idx to childIndex
		if ( mainItemList.indexOf(itemName) >= 0 ) order.article.art[idx].@mainUnit = 1;	// set MainUnit-attribute if ...
		if ( isSelected( itemName ) == true ) order.article.art[idx].@quantity ++;	// set @quantity
		if ( ( mainItemList.indexOf(itemName) >= 0 ) &&  isSelected( itemName ) ) order.systemCode = itemCode;	// set systemCode if ...
		order.article.art[idx].@item = order.article.art[idx].@item+itemName+";";	// set @item-name as ";"-sep stringlist
	}
	order.foliant.clicked = Registry.System.Logic.Clicked.toString();	// add the Foliant's clicked-list 
	order.foliant.idCode = Registry.Internals.ident.idCode.@value.toString();	// add the idCode of the specific Foliant
	order.foliant.language = Library.CurrentLanguage.toString();	// save the current used language
	order.foliant.visiblePage = Library.VisiblePage.toString();	// save the current visible results-page
	order.complete = Boolean([display.visible,display.hidden].indexOf(this.getField("Btn_IncompleteSys").display));	// save the validation-status
	return order;
}
javascript_obj0421_033.js pdf-javascript-stream PDF /JS object 421 at offset 0x795C6 2803 bytes
SHA-256: ba86545acca2b7887956f1345d7b46c046b5d33e1fb5dea6a310f8f4f3331636
Preview script
First 1,000 lines of the extracted script
var guid = "";	// web-browser URL parameter ( UID )

function _startup() 
{
	// activate the startup-overlay-screen 
	var f = this.getField("Btn_VersionCheckOverlay");
	f.delay = true;
	f.display = display.visible;
	f.rect = [0, 842, 595, 0 ];
	var msgVersionWarning = f.userName;
	f.delay = false;
	// check the current version of the PDF-viewer for compatibility
	var reqVersion = 8.0;
	var appInfo = {};
		appInfo.Type = app.viewerType; 
		appInfo.Variation = app.viewerVariation;
		appInfo.Version = app.viewerVersion;
		appInfo.VersionText = 'v'+appInfo.Version; if (appInfo.VersionText.indexOf(".")<0) appInfo.VersionText += '.0';
	if ( appInfo.Version < reqVersion )
	{
		var nButton = app.alert({cMsg: msgVersionWarning, cTitle: appInfo.Type+'  ( '+appInfo.Variation+' )  '+appInfo.VersionText, nIcon: 1, nType: 1 });
		if ( nButton == 2 ) this.closeDoc(); 
	}
} 

_startup();	// call the startup-function first - before XML-activities to protect from too old application versions
this.disclosed = true;	// make PDF detectable for other PDF-sessions
var markedDirty = this.dirty; // create variable to indicate the document's changes to be saved ( per function )

// initialise and check the Registry-XML-structure
registryInit();
if (Registry.System.Atoms.toString()=="") { Registry.System.Atoms=""; registrySave() }	// check for empty Atoms-structure, if empty, create "" value on it
if (Registry.System.Logic.toString()=="") { Registry.System.Logic=""; registrySave() }	// check for empty Logic-structure, if empty, create "" value on it

// initialise the Library-XML-Structure
Library_Init();

// call initialisation functions

// create the info-text for the status-bar ( BottomLine )
setBottomBarInfoLine();	

// set the submit-button to visible by default
Registry.Internals.menuItems.Btn_SubmitCRM.@visible=true;	

// is browser-detection enabled ??? If yes ...
if ( Registry.Internals.settings.detectExternal.@value=="true" ) 	
	if ( ( this.external == false ) || ( guid == "" ) ) Registry.Internals.menuItems.Btn_SubmitCRM.@visible=false;	// ... and no browser or no guid parameter found, SubmitCRM-btn will be hidden

// set all menu buttons to Registry-defined values
arrangeMenuButtons();	

// switch off focus rectangles for buttons ( icons )
app.focusRect = false;	

// switch off highliting of edit fields
app.runtimeHighlight = false;	

// set "dirty"-value to the startup-value
this.dirty = markedDirty;

// save all re-initialised values in Registry-XML-variable
registrySave();

// remove the startup-overlay
this.getField("Btn_VersionCheckOverlay").rect = [0, 0, 0, 0 ];

// identify the document by internal registry values / returns the ident-structure
var identifyDoc = Registry.Internals.ident;