@opcua/for-node-red
Version:
The Node-RED node to communicate via OPC UA, powered NodeOPCUA and developed by Sterfive's team
273 lines (207 loc) • 79.3 kB
HTML
<style>
.sterfive-combo-box{position:relative;width:100%}.sterfive-online-menu{height:auto;position:fixed;width:auto}.sterfive-input-error{border-color:var(--red-ui-form-input-border-error-color)!important;border-style:solid;border-width:1px}.sterfive-typedInput-options{background:#fff;border-style:solid;border-width:1px;border:1px solid var(--red-ui-primary-border-color);box-sizing:border-box;max-height:350px;overflow-y:auto;position:absolute;white-space:nowrap;z-index:2000}.sterfive-typedInput-options a{align-items:center;border-bottom:1px solid;border-color:var(--red-ui-secondary-border-color);border-style:solid;border-width:1px;color:var(--red-ui-form-text-color);display:flex;font-size:13px;padding:6px 18px 6px 6px;text-decoration:none}.sterfive-typedInput-options a:hover{background:var(--red-ui-workspace-button-background-hover);text-decoration:none}.sterfive-typedInput-options a:focus{outline:none}.sterfive-typedInput-options a:active,.sterfive-typedInput-options a:focus{background:var(--red-ui-workspace-button-background-active);text-decoration:none}.sterfive-typedInput-options a input[type=checkbox]{margin:0 6px 0 0}.sterfive-typedInput-options .sterfive-typedInput-icon{margin-right:6px}.sterfive-typedInput-options .sterfive-typedInput-icon:not(.fa){background-color:var(--red-ui-primary-text-color);height:14px;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:cover;mask-size:cover;width:12px}.sterfive-combo-box .sterfive-dropdown{background-color:#fff;border:1px solid #ccc;display:none;left:0;max-height:400px;overflow-y:auto;position:absolute;top:100%;width:100%;z-index:1000}.sterfive-combo-box li:before{content:none}.sterfive-tree li.expandable:before,.sterfive-tree li.no-expandable:before{content:"\f0da";cursor:pointer;font-family:FontAwesome;font-size:12pt;font-weight:900;margin-right:5px}.sterfive-tree li.no-expandable:before{opacity:0}.sterfive-tree li.expanded:before{content:"\f0d7";cursor:pointer;font-family:FontAwesome;font-size:12pt;font-weight:900;margin-right:5px}.sterfive-tree li span.selected{border:.5px dotted #33f}.sterfive-tree .fa{color:#333;margin-right:10px}.sterfive-tree ul{list-style:none;padding-inline-start:2%!important}.sterfive-tree li{cursor:pointer;padding:5px}.sterfive-tree{list-style-type:none}.sterfive-tree,.sterfive-tree ol,.sterfive-tree ul{list-style-type:none;margin:0;padding:0}.sterfive-tree li:hover{background-color:#eee}.sterfive-tree li.loading:before{animation:fa-spin 1s linear infinite;content:"\f110";cursor:pointer;font-family:FontAwesome;font-weight:900;margin-right:5px}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.sterfive-tree .spinner{animation:spin .7s linear infinite;border:2px solid transparent;border-radius:50%;border-top-color:#666;display:inline-block;height:16px;width:16px}.sterfive-info{background-color:#fafad2;border-radius:10px;border-style:groove;display:block;font-size:10pt;margin:5px 0;padding:5px}.sterfive-info .ok{color:green}.sterfive-info .warning{color:darkred}.input-wrapper{border:0 solid #ccc;border-radius:5px;padding:0}.sterfive-input-group{border:1px solid #ccc;border-radius:5px;display:flex;overflow:hidden}.sterfive-input-group button,.sterfive-input-group input{border:none;outline:none;padding:10px}.sterfive-input-group input{flex:1}.sterfive-input-group button{background-color:var(--red-ui-form-button-background);color:#7b7a7a;cursor:pointer}.sterfive-input-group button:hover{background-color:var(--red-ui-secondary-background-hover)}.sterfive-info-text{color:#777;font-size:12px;margin-left:10px;margin-top:5px}.custom-checkbox{cursor:pointer;display:inline-block;font-family:FontAwesome;font-size:16px;font-weight:900;margin-right:10px;text-align:center;width:1em}.custom-checkbox.unchecked:before{content:"\f096"}.custom-checkbox.checked:before{content:"\f046"}.validate-cancel-buttons{background-color:#fff;position:sticky;right:0;top:0;z-index:1001}.cancel-button,.validate-button{cursor:pointer;font-size:16px;margin:5px}.sterfive-combo-box .sterfive-dropdown{position:relative}.floating-buttons{position:fixed;z-index:1003}.mask-flag-dropdown .option-item{border:1px solid #ccc;cursor:pointer;display:inline-block;font-family:FontAwesome;font-size:16px;font-weight:900;margin-right:10px;padding:5px 10px;text-align:center;width:1em}.mask-flag-dropdown .option-item .checkbox{border:1px solid #ccc;content:"\f096";display:inline-block;height:20px;margin-right:5px;width:20px}.mask-flag-dropdown .option-item.selected .checkbox{content:"\f046"}.custom-select{background-color:#fff;border:1px solid #ccc;box-sizing:border-box;cursor:pointer;max-height:200px;overflow-y:auto;padding:5px;width:100%}.custom-select .custom-option{align-items:center;border-bottom:1px solid #eee;display:flex;padding:5px 10px}.custom-select .custom-option:last-child{border-bottom:none}.custom-select .custom-option .custom-checkbox{align-items:center;border:1px solid #ccc;display:flex;font-size:14px;height:20px;justify-content:center;margin-right:8px;width:20px}.custom-select .custom-option.selected .custom-checkbox{border-color:#007bff}.custom-select .custom-option .custom-checkbox:before{color:#007bff;content:"\f096";font-family:FontAwesome}.custom-select .custom-option.selected .custom-checkbox:before{content:"\f046"}
/*# sourceMappingURL=OpcUa-Client2-FileOperation.css.map */
</style>
<!-- HTML CONTENTS -->
<script type="text/x-red" data-template-name="OpcUa-Client2-FileOperation">
<h3>
Opc-UA FileOperation
<a href="https://opcua-for-node-red.doc.sterfive.com/docs/file-operation" target="_blank"><i class="fa fa-question"></i></a>
</h3>
<div class="form-row">
<label for="node-input-name"><i class="icon-tasks"></i>Name</label>
<input type="text" id="node-input-name" placeholder="enter the friendly name of the node" />
</div>
<div class="form-row">
<label for="node-input-endpoint"><i class="icon-tasks"></i> Endpoint</label>
<input type="text" id="node-input-endpoint" placeholder="opc.tcp://localhost:4334" />
</div>
<div class="form-row">
<label for="node-input-mode">Mode</label>
<select type="text" id="node-input-mode" style="width: 72%">
<option selected value="Read">Read</option>
<option value="Write">Write</option>
<option value="WriteAppend">Append</option>
</select>
</div>
<!-- ont valid for mode == Read-->
<div id="format-selector" class="form-row">
<label for="node-input-format"><i class="fa fa-sign-out"></i> <span data-i18n="node-red:file.label.outputas"></span></label>
<select id="node-input-format" style="width: 250px">
<option value="utf8" data-i18n="node-red:file.output.utf8"></option>
<option value="lines" data-i18n="node-red:file.output.lines"></option>
<option value="" data-i18n="node-red:file.output.buffer"></option>
<!-- not supported yet
<option value="stream" data-i18n="node-red:file.output.stream"></option>
-->
</select>
</div>
<div id="encoding-spec" class="form-row form-row-file-encoding">
<label for="node-input-encoding"><i class="fa fa-flag"></i> <span data-i18n="node-red:file.label.encoding"></span></label>
<select type="text" id="node-input-encoding" style="width: 250px"></select>
</div>
<div class="form-row">
<label for="node-input-nodeId" style="width: 100%"><i class="fa fa-tag"></i>NodeId</label>
<input type="text" id="node-input-nodeId" placeholder="ns=1;s=fileNode" />
</div>
<!--
<div class="form-row">
<label for="node-input-encoding">Encodeing</label>
<select type="text" id="node-input-encoding" style="width: 72%">
<option selected value="Utf8">Utf-8</option>
<option value="Buffer">Buffer</option>
<option value="Base64">Base64</option>
</select>
</div>
-->
</script>
<!-- MARKDOWN CONTENTS -->
<script type="text/markdown" data-help-name="OpcUa-Client2-FileOperation">
## OPC UA File Operation Node
Perform read and write operations on OPC UA File objects that implement the FileType interface (ns=0;i=11575).
This node enables interaction with files stored on OPC UA servers, supporting various read/write modes, encoding options, and output formats.
### Configuration
#### NodeId
- **Required**: The NodeId must reference an Object node with TypeDefinition = FileType
- **Input**: Can be configured in the node or provided dynamically via `msg.nodeId`
- **Format**: Supports standard NodeId formats (ns=X;i=Y) and browse paths (/ns1:FolderDemo/ns1:file.txt)
#### Mode
Select the operation to perform:
- **Read**: Reads the complete file content from the OPC UA server
- **ReadSize**: Returns only the file size in bytes without reading content
- **Write**: Writes data to the file (equivalent to WriteEraseExisting)
- **WriteEraseExisting**: Overwrites the entire file with new content
- **WriteAppend**: Appends data to the end of the existing file
#### Encoding (Read/Write)
Controls character encoding for text files:
- **none**: Raw binary data (default)
- **setbymsg**: Use encoding specified in `msg.encoding`
- **utf8, ascii, utf-16le**: Unicode encodings
- **Shift_JIS, EUC-JP**: Japanese encodings
- **GB2312, GBK, Big5**: Chinese/Taiwan encodings
- Plus many other regional encodings (Windows, ISO, IBM, Mac, KOI8)
#### Format (Read only)
Output format for read operations:
- **buffer**: Returns raw Buffer object (default)
- **utf8**: Returns decoded string using specified encoding
- **lines**: Returns array of strings, split by newline characters
### Input Message
#### Read Operations
```javascript
msg = {
nodeId: "ns=1;s=MyFile" // Optional, overrides configured NodeId
encoding: "utf8" // Optional, when encoding="setbymsg"
}
```
#### Write Operations
```javascript
msg = {
payload: "content to write", // String, Buffer, or JSON object
nodeId: "ns=1;s=MyFile", // Optional, overrides configured NodeId
encoding: "utf8", // Optional, when encoding="setbymsg"
};
```
**Write Payload Types:**
- **String**: Written directly (with optional encoding)
- **Buffer**: Written as binary data
- **Object/Array**: Automatically JSON.stringify'd
- **Boolean/Number**: Converted to string
### Output Message
#### Read Mode
```javascript
msg = {
payload: <Buffer|string|string[]> // Based on format setting
}
```
#### ReadSize Mode
```javascript
msg = {
payload: 12345, // File size in bytes
};
```
#### Write Modes
```javascript
msg = {
size: 12345, // Number of bytes written
};
```
### How It Works
**Read Process:**
1. Opens the OPC UA File object
2. Reads content in optimized chunks (respects server MaxByteStringLength)
3. Automatically handles large files using streaming
4. Applies encoding/format conversion if specified
5. Returns formatted output
**Write Process:**
1. Extracts and encodes data from msg.payload
2. Opens file in specified mode (Write/Append)
3. Splits data into chunks based on transport limits
4. Writes chunks sequentially to server
5. Returns final file size
**Performance Optimization:**
- Chunk size automatically calculated based on:
- Server's MaxByteStringLength capability
- Transport maxMessageSize settings
- Hard limit of BinaryStream.maxByteStringLength
- Streaming architecture handles files larger than memory
### Node Status
- **Operating**: Reading/writing in progress
- **size = X**: Operation completed successfully (X bytes)
- **failed**: Operation error (check debug panel)
### Examples
#### Read Text File
```javascript
// Configure: Mode=Read, Format=utf8, Encoding=utf8
// Input: trigger inject
// Output: msg.payload = "file contents as string"
```
#### Read CSV as Lines
```javascript
// Configure: Mode=Read, Format=lines, Encoding=utf8
// Input: trigger inject
// Output: msg.payload = ["line1", "line2", "line3"]
```
#### Write JSON Data
```javascript
// Configure: Mode=Write, Encoding=utf8
msg.payload = { temperature: 25.5, timestamp: Date.now() };
// Result: JSON string written to file
```
#### Append Log Entry
```javascript
// Configure: Mode=WriteAppend, Encoding=utf8
msg.payload = "2025-11-24 12:00:00 - New log entry\n";
// Result: Appended to existing file
```
#### Check File Size
```javascript
// Configure: Mode=ReadSize
// Input: trigger inject
// Output: msg.payload = 4096 (bytes)
```
#### Dynamic NodeId
```javascript
// Configure: NodeId = (leave empty)
msg.nodeId = "/ns1:Logs/ns1:system.log";
// Read/write operation uses runtime-specified file
```
### Error Handling
Common errors:
- **"nothing to write"**: msg.payload is undefined/empty
- **"expecting a nodeIdString"**: Invalid nodeId format
- **Failed status**: Node error contains specific OPC UA status code
### Tips
1. **Large Files**: Node automatically handles chunking - no size limits beyond server capabilities
2. **Text Files**: Use encoding="utf8" and format="utf8" for best results
3. **Binary Files**: Use encoding="none" and format="buffer" for images, executables, etc.
4. **CSV Processing**: Use format="lines" to get array of rows for easy parsing
5. **Dynamic Files**: Pass nodeId in msg for runtime file selection
6. **Append Mode**: Ideal for logging scenarios where existing data must be preserved
### Related Nodes
- **OpcUa-Client2-Browse**: Discover available File objects on the server
- **OpcUa-Client2-Read**: Read file metadata properties (Size, OpenCount, UserWritable)
- **OpcUa-Client2-Call**: Call file methods (GetPosition, SetPosition, etc.)
</script>
<!-- END OF CONTENTS -->
<script type="text/javascript">
function _0x2e19(_0x21f64a,_0x491949){_0x21f64a=_0x21f64a-0x153;const _0x104ad0=_0x104a();let _0x2e19de=_0x104ad0[_0x21f64a];return _0x2e19de;}function _0x104a(){const _0x1848ef=['ISO-8859-6','ISO-8859-13','_initMenu','POST','cp1256','maccroatian','parentNode','after','DarkOrange','number','references','right','namesToBits','TypeDefinition','64px','attr','koi8-t','width=1200,height=800','sterfive-info','li[key=\x22','GB2312','330156iLjbwe','IsForward','settings','keydown','opts','bannerClass','#e9ecef','13px',';\x22></i>\x20','replace','blur(10px)','HasChild','\x22}><span\x20class=\x22tree-text\x22\x20title=','<i\x20class=\x22fa\x20fa-bookmark\x22/> \x20','background-color','nodeBrowser','opcUaEndpoint2Config','HasTypeDefinition','background-color\x200.2s','cp1133','space-between','nodeId','\x20|\x20','forEach','0\x2020px\x2050px\x20rgba(0,0,0,0.25)','<div>','ObjectType','EXPIRED','inputs','messageCss','node-red:file.encoding.taiwan','location','<button>','absolute','cp737','DataType','red-ui-typedInput-focus','node-red:file.encoding.japanese','apply','err','EUC-CN','input[type=\x22checkbox\x22]','View','24px','ISO-8859-8','options','mouseleave','sterfive-input-group','20px','Trial\x20License\x20Expired','I\x20accept\x20to\x20switch\x20to\x20the\x20free\x20version\x20(limited\x20features)','ISO-8859-10','next','$input','map','_blank','each','url','children','msg.','fetching\x20failed\x20with\x20error','Failed\x20to\x20check\x20licence\x20status:','endpointNode','Big5-HKSCS','cp1257','> \x20','0.0.0','elements','<button\x20title=\x22open\x20OPCUA\x20AddressSpace\x20Browser\x22><i\x20class=\x22fa\x20fa-sitemap\x22></i></button>','!!failure!!','toISOString','$menu','mousedown','cp1124','sterfive-dropdown','prop','grey','catch','6px\x2012px','Could\x20not\x20find\x20dialog\x20content\x20to\x20show\x20licence\x20overlay','\x22]\x20is\x20not\x20set,\x20using\x20default\x20API\x20namespace','displayName','Variable','pageY','<div\x20class=\x22spinner\x22></div>','/images/small-sterfive.png','first','text','nodeId_aliased','href','licence-freemium-banner','startsWith','#dc3545','cp437','split','data','#721c24','</strong>.\x20','cp1255','node-red:file.encoding.misc','<button\x20type=\x22button\x22\x20tabindex=\x220\x22></button>','#node-input-endpoint','#encoding-spec','messageHtml','Could\x20not\x20find\x20dialog\x20content\x20to\x20show\x20banner\x20.','css','nodeId:\x20','Invalid','1px\x20solid\x20#ced4da',':visible','reset','permanent','callback','<li>error\x20','mouseenter','registerType','placeholder','background-color:transparent;overflow:hidden;border:3px','border','DodgerBlue','updateValue','_showTypeMenu','blur(20px)','FAILED','preventDefault','162960yGgiwK','ns=0;i=','SuppressedError','/browse','GB18030','HasComponent','50px','<input\x20type=\x22checkbox\x22>','httpNodeRoot\x20missing\x20trailing\x20slash','true','ISO-8859-12','flex','$uiSelect','<unknown>','ns=0;i=46','typeDefinition','setItem','msg','find','i=61','sterfive-combo-box','cp1250','fa-text-width','push','name','#fff3cd','TRIAL','<i\x20class=\x22fa\x20fa-font\x22/i>\x20','cp860','bannerCss','loading','pt154','center','cp1253','relativePath','replaceChild','input-group','label','Your\x20trial\x20license\x20expires\x20in\x20<strong>','translateY(-50%)','BrowseName','2552336YEdbCB','cp1163','node-red:file.encoding.iso','currentParent','macturkish','2596cjjERh','opcua-for-node-red-fix-me','Value\x20is\x20not\x20verified','parentElement','icon','checked','slideUp','reference','300484GAlnTL','$selectLabel','maccenteuro','endpoint','join','16px','lines','fa-question','rgba(','ceil','1.6','$info','Aliased\x20Browse\x20Path','appendTo','widget','node','Method','node-red:file.encoding.native','_showMenu','entries','#node-input-encoding','browse\x20path:\x20','node-red:file.encoding.windows','wrap','Cannot\x20retrieve\x20help\x20url','ISO-8859-16','rgb(','fa-list-alt','node-red:file.encoding.setbymsg','title','cp775','mousedown.red-ui-typedInput-focus-block','$selectTrigger','Windows-31j','2px\x20solid\x20#ffc107','licence-activated','<iframe></iframe>','function','node-red:file.encoding.mac','browseName','expanded','statusCode:\x20','pathname','offset','stopPropagation','RED.settings[\x22','val','NodeClass','ReferenceType','utf-16le','underline','removeClass','Good','ISO-8859-3','</li>','koi8-ru','rgba(0,\x200,\x200,\x200.05)','</div>','statusCode','10px','prepend','cp1129','application/json','.spinner','licenceInfo','main-wrapper','500','getTime','prev','<button><i\x20class=\x22fa\x20fa-eye\x22></i></button>','pointer','ISO-8859-9','\x20day','mousedown.red-ui-typedInput-close-property-select','opacity','#856404','base64','VariableType','$combo','<p>','node\x20class:\x20','</span>','$dropdown','cp1258','buttonHoverCss','<li\x20key=\x22','OpcUa-Endpoint2','Inverse','<h2>','log','Object','buffer','Windows936','ISO-8859-7','setMode','fetched','sterfive.nodeBrowser','append','Read','Renew\x20Now','filter','requestedNodeId','#node-input-format','0\x202px\x208px\x20rgba(0,0,0,0.1)','<div/>','$elementDiv','change','keyCode','90295pYvtzT','aliasedNodeId','Could\x20not\x20find\x20dialog\x20content\x20to\x20show\x20licence\x20banner','error','macukraine','nodeIds','enter\x20a\x20nodeId\x20or\x20a\x20browsePath\x20','length','EUC-JP','<i\x20class=\x22fa\x20fa-tag\x22/>1\x20 \x20','rgba(255,\x20255,\x20255,\x200.9)','#333','sterfive-typedInput-options\x20sterfive-online-menu','call','status','replaceWith','before','<img>','mask-image:\x20url(','.red-ui-tray-content','Aliased\x20NodeId','macgreek','KS_C_5601','10px\x2015px','stringify','7LsursB','insertAfter','#format-selector','<i\x20class=\x22fa\x20fa-tag\x22/><i\x20class=\x22fa\x20fa-fighter-jet\x22/> ','SeaGreen','fa-object-group','tcvn','Your\x20trial\x20period\x20has\x20ended.\x20To\x20continue\x20using\x20this\x20node,\x20please\x20purchase\x20a\x20professional\x20license\x20or\x20contact\x20our\x20support\x20team\x20for\x20assistance.','245958PTwNWq','already\x20fetched','cp1251','nodeClass','none','binary','<optgroup/>','Upgrade','value','position','licence-activation-overlay','utf8','node-red:file.encoding.none','<i\x20class=\x22fa\x20fa-envelope-open-o\x22/>','$toggleTreeBtn','12px','ISO-8859-1','<span>','bp_indexed','empty','fadeIn','00000000-0000-0000-0000-000000000000','node-red:file.encoding.koi8','indexOf',':first','/licenceInfo','warn','<option/>','isArray','15px\x2030px','#f8d7da','EUC-KR','httpNodeRoot','scrollTop','HasSubtype','__parentNode','Get\x20a\x20license\x20now','mode','auto','body','addClass','open','/walk-backward','cp1252','then','left','white','Both','<i>','done','<span\x20title=','Forward','node\x20id\x20or\x20\x20browse\x20path\x20comes\x20from\x20injected\x20msg\x20parameter','iso646jp','_delay','transparent','trim','nodeId_nsu','sort','Organizes','toggle','nsuNodeID','OPCUA\x20File\x20','<a>','BrowsePath','.tree-text:first','expandable\x20expanded','DisplayName','height','5px','already\x20loading','8px','closest','SteelBlue','nodes','getItem','toString','isSelectable','<ul\x20class=\x22sterfive-tree\x22></ul>','top','expandable','ISO-8859-5','hasClass','Get\x20Support\x20&\x20Activate\x20License','cp861','NodeId\x20with\x20namespace\x20Urn','.red-ui-tray-body','opcua','element','$tree','prependTo','14px','macromania','Big5','#ccc','node-red:file.encoding.korean','_hideMenu','has-node-help-widget','hide','NodeId','target','resolveParentNode','#node-input-mode','setbymsg','100%','opcua-for-nodered-last-overlay-shown','nsu\x20nodeId:\x20','trigger','40px','sterfive.flagEditor','remove','georgianps','buttonCss','$inputGroup','red-ui-typedInput-icon','assign','sterfive-input-error','<div\x20class=\x22sterfive-info-text\x22></div>','Objects','#2196F3','rgba(61,\x2060,\x204,\x200.525)','OpcUa-Client2-FileOperation','focus','disarmClick','opc.tcp://opcuademo.sterfive.com:26543','Windows949','referenceTypeId','endsWith','dblclick','ISO-8859-2','addEventListener','180px','/support-frame.html','ISO-8859-11','show','isTypeRef','500px','$verifyBtn','selectedMenuItem','50%','aliased\x20browsePath:\x20','cp874',':focus','15px','type','browsePath','backgroundColor','expiryDate','relative','failure','maciceland','Unknown\x20bit\x20name','.custom-option','json','pointer-events','macroman','html','toggleClass','throw','statusText','<i\x20class=\x22fa\x20fa-id-card\x22/> \x20','viscii','message','now','fa-folder','match','macthai','namespaceAliases','click','nsu','#555','blur','cp856','Unspecified','pageX','CadetBlue','<span\x20class=\x22custom-checkbox\x22></span>','cp869','selected','bp_aliased'];_0x104a=function(){return _0x1848ef;};return _0x104a();}(function(_0x4fd14e,_0xaffaad){const _0x3100b7=_0x2e19,_0x1b7e3c=_0x4fd14e();while(!![]){try{const _0x5197d1=parseInt(_0x3100b7(0x33b))/0x1+parseInt(_0x3100b7(0x2cf))/0x2+parseInt(_0x3100b7(0x21c))/0x3+parseInt(_0x3100b7(0x2c7))/0x4+parseInt(_0x3100b7(0x299))/0x5+parseInt(_0x3100b7(0x153))/0x6*(parseInt(_0x3100b7(0x354))/0x7)+-parseInt(_0x3100b7(0x2c2))/0x8;if(_0x5197d1===_0xaffaad)break;else _0x1b7e3c['push'](_0x1b7e3c['shift']());}catch(_0x26d226){_0x1b7e3c['push'](_0x1b7e3c['shift']());}}}(_0x104a,0x19d35),(function(){'use strict';const _0x3c7e0c=_0x2e19;function _0x4404e8(_0x102a29,_0xc8d0a4,_0x160353,_0x22779d){function _0x488d46(_0x32ac29){return _0x32ac29 instanceof _0x160353?_0x32ac29:new _0x160353(function(_0x3ae4d7){_0x3ae4d7(_0x32ac29);});}return new(_0x160353||(_0x160353=Promise))(function(_0x45d908,_0x2a5c92){const _0x36a159=_0x2e19;function _0x777b4e(_0x1b22b3){const _0x5f6c97=_0x2e19;try{_0x28904b(_0x22779d[_0x5f6c97(0x250)](_0x1b22b3));}catch(_0x1426cf){_0x2a5c92(_0x1426cf);}}function _0x34e1f3(_0x3d79c0){const _0x1ef433=_0x2e19;try{_0x28904b(_0x22779d[_0x1ef433(0x1f1)](_0x3d79c0));}catch(_0x447c26){_0x2a5c92(_0x447c26);}}function _0x28904b(_0x2b8d77){const _0x1ddf12=_0x2e19;_0x2b8d77[_0x1ddf12(0x184)]?_0x45d908(_0x2b8d77['value']):_0x488d46(_0x2b8d77['value'])[_0x1ddf12(0x17f)](_0x777b4e,_0x34e1f3);}_0x28904b((_0x22779d=_0x22779d[_0x36a159(0x242)](_0x102a29,_0xc8d0a4||[]))[_0x36a159(0x250)]());});}typeof SuppressedError===_0x3c7e0c(0x2f4)?SuppressedError:function(_0x457df0,_0x2d3ccd,_0x9a2eba){const _0x2606af=_0x3c7e0c;var _0x389c8e=new Error(_0x9a2eba);return _0x389c8e[_0x2606af(0x2b1)]=_0x2606af(0x29b),_0x389c8e[_0x2606af(0x33e)]=_0x457df0,_0x389c8e['suppressed']=_0x2d3ccd,_0x389c8e;};const _0x495ed4='ns=0;i=35',_0x3ab3c3='ns=0;i=61',_0x59ea24='ns=0;i=47',_0x211f1c=_0x3c7e0c(0x2a7),_0x35294c='ns=0;i=34',_0x494c38='ns=0;i=45',_0x2cf147='ns=0;i=40';var _0x357ff7;(function(_0x5e1b43){const _0x5ed440=_0x3c7e0c;_0x5e1b43[_0x5e1b43[_0x5ed440(0x186)]=0x0]=_0x5ed440(0x186),_0x5e1b43[_0x5e1b43[_0x5ed440(0x326)]=0x1]=_0x5ed440(0x326),_0x5e1b43[_0x5e1b43[_0x5ed440(0x182)]=0x2]='Both',_0x5e1b43[_0x5e1b43['Invalid']=0x3]=_0x5ed440(0x287);}(_0x357ff7||(_0x357ff7={})));var _0x1fce42;(function(_0x5ee3ba){const _0x5b4e38=_0x3c7e0c;_0x5ee3ba[_0x5ee3ba[_0x5b4e38(0x200)]=0x0]=_0x5b4e38(0x200),_0x5ee3ba[_0x5ee3ba['Object']=0x1]=_0x5b4e38(0x329),_0x5ee3ba[_0x5ee3ba[_0x5b4e38(0x26e)]=0x2]=_0x5b4e38(0x26e),_0x5ee3ba[_0x5ee3ba[_0x5b4e38(0x2df)]=0x4]=_0x5b4e38(0x2df),_0x5ee3ba[_0x5ee3ba['ObjectType']=0x8]=_0x5b4e38(0x236),_0x5ee3ba[_0x5ee3ba[_0x5b4e38(0x31c)]=0x10]='VariableType',_0x5ee3ba[_0x5ee3ba[_0x5b4e38(0x2ff)]=0x20]=_0x5b4e38(0x2ff),_0x5ee3ba[_0x5ee3ba[_0x5b4e38(0x23f)]=0x40]=_0x5b4e38(0x23f),_0x5ee3ba[_0x5ee3ba[_0x5b4e38(0x246)]=0x80]=_0x5b4e38(0x246);}(_0x1fce42||(_0x1fce42={})));var _0x5b076f;(function(_0x23a084){const _0x418116=_0x3c7e0c;_0x23a084[_0x23a084[_0x418116(0x329)]=0x1]=_0x418116(0x329),_0x23a084[_0x23a084[_0x418116(0x26e)]=0x2]=_0x418116(0x26e),_0x23a084[_0x23a084['Method']=0x4]=_0x418116(0x2df),_0x23a084[_0x23a084[_0x418116(0x236)]=0x8]='ObjectType',_0x23a084[_0x23a084[_0x418116(0x31c)]=0x10]=_0x418116(0x31c),_0x23a084[_0x23a084[_0x418116(0x2ff)]=0x20]=_0x418116(0x2ff),_0x23a084[_0x23a084[_0x418116(0x23f)]=0x40]='DataType',_0x23a084[_0x23a084[_0x418116(0x246)]=0x80]=_0x418116(0x246);}(_0x5b076f||(_0x5b076f={})));function _0xa0b39(_0xc93955,_0x3b0ebf){const _0x644073=_0x3c7e0c;if(typeof _0x3b0ebf===_0x644073(0x210))return _0x3b0ebf;const _0x5be7ca=parseInt(_0x3b0ebf,0xa);if(!isNaN(_0x5be7ca))return _0x5be7ca;const _0x16acb9=_0x3b0ebf[_0x644073(0x27a)](/\||;|,/)[_0x644073(0x252)](_0x5b30ea=>_0x5b30ea[_0x644073(0x18b)]());let _0x491bde=0x0;for(const _0x4d84bb of _0x16acb9){_0x491bde|=_0xc93955[_0x4d84bb];}return _0x491bde;}function _0x343404(_0x24635d,_0x24eff1){const _0x5ed3ed=_0x3c7e0c;_0x24eff1=_0xa0b39(_0x24635d,_0x24eff1);const _0x220c41=[];if(!_0x24635d)return _0x220c41[_0x5ed3ed(0x2d3)](_0x5ed3ed(0x232));for(const [_0x219a4,_0x4aae33]of Object[_0x5ed3ed(0x2e2)](_0x24635d)){typeof _0x24eff1===_0x5ed3ed(0x210)&&((_0x24eff1&_0x4aae33)===_0x4aae33&&_0x220c41[_0x5ed3ed(0x2b0)](_0x219a4));}return _0x220c41['join'](_0x5ed3ed(0x232));}var _0x57ba53;(function(_0x368f0b){const _0x3401e2=_0x3c7e0c;_0x368f0b[_0x368f0b[_0x3401e2(0x2ff)]=0x1]=_0x3401e2(0x2ff),_0x368f0b[_0x368f0b[_0x3401e2(0x21d)]=0x2]=_0x3401e2(0x21d),_0x368f0b[_0x368f0b['NodeClass']=0x4]=_0x3401e2(0x2fe),_0x368f0b[_0x368f0b[_0x3401e2(0x2c1)]=0x8]='BrowseName',_0x368f0b[_0x368f0b['DisplayName']=0x10]=_0x3401e2(0x196),_0x368f0b[_0x368f0b[_0x3401e2(0x214)]=0x20]=_0x3401e2(0x214);}(_0x57ba53||(_0x57ba53={})));function _0x352878(_0xd1109f){const _0x3a7907=_0x3c7e0c;switch(_0xd1109f){case _0x3a7907(0x18e):return _0x495ed4;case'HasProperty':return _0x211f1c;case _0x3a7907(0x29e):return _0x59ea24;case _0x3a7907(0x227):return _0x35294c;case _0x3a7907(0x175):return _0x494c38;case _0x3a7907(0x22d):return _0x2cf147;}}const _0x438340=_0x30e13b=>{const _0x4adced=_0x3c7e0c;switch(_0x30e13b['nodeClass']){case _0x4adced(0x329):if(_0x30e13b[_0x4adced(0x1d1)]===_0x495ed4);if(_0x30e13b[_0x4adced(0x2a8)]===_0x3ab3c3||_0x30e13b[_0x4adced(0x1d1)]===_0x4adced(0x2ac))return{'icon':_0x4adced(0x1f7),'color':_0x4adced(0x1cb)};return{'icon':_0x4adced(0x359),'color':_0x4adced(0x358)};case _0x4adced(0x26e):if(_0x30e13b['referenceTypeId']===_0x59ea24)return{'icon':_0x4adced(0x2ea),'color':_0x4adced(0x19c)};else return _0x30e13b[_0x4adced(0x1d1)]===_0x211f1c?{'icon':_0x4adced(0x2ea),'color':_0x4adced(0x293)}:{'icon':'fa-list-alt','color':_0x4adced(0x202)};case _0x4adced(0x2df):return{'icon':'fa-cog','color':'SandyBrown'};case _0x4adced(0x236):return{'icon':_0x4adced(0x359),'color':_0x4adced(0x20f)};case _0x4adced(0x31c):return{'icon':'fa-sliders','color':_0x4adced(0x20f)};case _0x4adced(0x23f):return{'icon':_0x4adced(0x2af),'color':_0x4adced(0x202)};}return{'icon':_0x4adced(0x2d6),'color':_0x4adced(0x268)};};function _0x5f1acf(_0x42b19f){const _0x31aba0=_0x3c7e0c;!_0x42b19f[_0x31aba0(0x277)]('/')&&(_0x42b19f='/'+_0x42b19f);const _0x5ea57d=_0x31aba0(0x22c);let _0x551d07=RED['settings'][_0x5ea57d];!_0x551d07&&(console['warn'](_0x31aba0(0x2fc)+_0x5ea57d+_0x31aba0(0x26c)),_0x551d07=_0x31aba0(0x2c8));!RED[_0x31aba0(0x21e)][_0x31aba0(0x173)][_0x31aba0(0x1d2)]('/')&&console[_0x31aba0(0x328)](_0x31aba0(0x2a1));const _0x1c322e=_0x144651(RED[_0x31aba0(0x21e)][_0x31aba0(0x173)]+_0x551d07+_0x42b19f);return console[_0x31aba0(0x328)]({'location':window[_0x31aba0(0x23b)][_0x31aba0(0x2f9)],'apiPath':_0x42b19f,'API_NAMESPACE':_0x551d07,'result':_0x1c322e}),_0x1c322e;}function _0x144651(_0x1474d1){return _0x1474d1['startsWith']('/')?_0x1474d1['slice'](0x1):_0x1474d1;}const _0x1328a7=(_0x12a999,_0x54b3ce,_0x38736a)=>_0x4404e8(void 0x0,[_0x12a999,_0x54b3ce,_0x38736a],void 0x0,function*({endpointNode:_0x37201d,endpoint:_0x186742},_0x4f7dd1,_0x570915){const _0x135fa6=_0x3c7e0c,_0x18daf2=Object[_0x135fa6(0x1c6)](Object[_0x135fa6(0x1c6)]({},_0x570915),{'nodeId':_0x4f7dd1,'resultMask':0x3f}),_0x3306d2=_0x5f1acf(_0x135fa6(0x29c)),_0x344c46=yield fetch(_0x3306d2,{'method':'POST','body':JSON['stringify']({'endpointNode':_0x37201d,'endpoint':_0x186742,'browseDescription':_0x18daf2}),'headers':{'Content-Type':_0x135fa6(0x30d)}});if(_0x344c46[_0x135fa6(0x349)]!==0xc8)return console[_0x135fa6(0x328)](_0x135fa6(0x258),_0x344c46[_0x135fa6(0x349)],_0x344c46['statusText']),{'references':[]};const _0x2e7195=yield _0x344c46['json'](),_0x480f00=_0x2e7195['browseResult'][_0x135fa6(0x211)]||[];return{'references':_0x480f00};}),_0x3304df={'referenceTypeId':_0x352878(_0x3c7e0c(0x227)),'includeSubtypes':!![],'browseDirection':_0x357ff7[_0x3c7e0c(0x186)],'nodeClassMask':_0x1fce42[_0x3c7e0c(0x26e)]|_0x1fce42['Object']|_0x1fce42['Method'],'resultMask':0x3f},_0x4d84b9={'referenceTypeId':_0x352878('Organizes'),'includeSubtypes':!![],'browseDirection':_0x357ff7[_0x3c7e0c(0x186)],'nodeClassMask':_0x1fce42[_0x3c7e0c(0x26e)]|_0x1fce42['Object']|_0x1fce42[_0x3c7e0c(0x2df)],'resultMask':0x3f},_0x2e5692=(_0xbac021,_0x357c00)=>_0x4404e8(void 0x0,[_0xbac021,_0x357c00],void 0x0,function*({endpointNode:_0x32f06a,endpoint:_0x4cb892},{nodeId:_0x122af3,rootNodeId:_0x298ac6,isType:_0x31ef5c}){const _0x2ea25a=_0x3c7e0c,_0x487248=_0x5f1acf(_0x2ea25a(0x17d)),_0x2cd108=yield fetch(_0x487248,{'method':'POST','body':JSON[_0x2ea25a(0x353)]({'endpointNode':_0x32f06a,'endpoint':_0x4cb892,'nodeId':_0x122af3,'rootNodeId':_0x298ac6,'isType':_0x31ef5c}),'headers':{'Content-Type':'application/json'}});if(_0x2cd108[_0x2ea25a(0x349)]!==0xc8)return null;const _0x325028=yield _0x2cd108['json']();return _0x325028['browsePath'];}),_0x338e88=(_0x903705,_0x1929fe)=>{const _0x416b57=_0x3c7e0c;if(_0x903705['statusCode']!=='Good')return _0x903705[_0x416b57(0x334)];switch(_0x1929fe){case'browsePath':return _0x903705['bp_indexed'];case'aliasedBrowsePath':return _0x903705[_0x416b57(0x206)]||_0x903705[_0x416b57(0x165)];case'aliasedNodeId':return _0x903705['nodeId_aliased']||_0x903705[_0x416b57(0x18c)];case _0x416b57(0x190):return _0x903705[_0x416b57(0x18c)];default:case'nodeId':return _0x903705[_0x416b57(0x231)];}},_0x4dab60=_0x2d353b=>{const _0x14c0a8=_0x3c7e0c;if(_0x2d353b[_0x14c0a8(0x309)]!=='Good')return _0x14c0a8(0x2f8)+_0x2d353b[_0x14c0a8(0x309)];else{let _0x4ac576=[];return _0x4ac576[_0x14c0a8(0x2b0)](_0x14c0a8(0x286)+_0x2d353b[_0x14c0a8(0x231)]),_0x4ac576[_0x14c0a8(0x2b0)](_0x14c0a8(0x2e4)+_0x2d353b[_0x14c0a8(0x165)]),_0x4ac576[_0x14c0a8(0x2b0)](_0x14c0a8(0x31f)+_0x1fce42[_0x2d353b[_0x14c0a8(0x156)]]),_0x2d353b['nodeId_nsu']&&_0x4ac576[_0x14c0a8(0x2b0)](_0x14c0a8(0x1bd)+_0x2d353b[_0x14c0a8(0x18c)]),_0x2d353b[_0x14c0a8(0x274)]&&_0x4ac576[_0x14c0a8(0x2b0)]('aliased\x20NodeId:\x20'+_0x2d353b[_0x14c0a8(0x274)]),_0x2d353b['bp_indexed']&&_0x4ac576[_0x14c0a8(0x2b0)](_0x14c0a8(0x1df)+_0x2d353b[_0x14c0a8(0x206)]),_0x4ac576[_0x14c0a8(0x2d3)]('\x0a');}};function _0x2c6a1f(_0x598400){const _0x275d6a=_0x3c7e0c;if(_0x598400[_0x275d6a(0x1f8)](/^nsu=/))return _0x275d6a(0x190);if(_0x598400[_0x275d6a(0x1f8)](/^(ns=.*;)?(i|b|s|g)=/))return'nodeId';if(_0x598400[_0x275d6a(0x1f8)](/^nsa=/))return _0x275d6a(0x33c);if(_0x598400[_0x275d6a(0x1f8)](/^(\/|\.)[0-9]+:/))return _0x275d6a(0x1e4);if(_0x598400[_0x275d6a(0x1f8)](/^(\/|\.).*:/))return'browsePath';}function _0x1e52db(_0x4455fe){const _0x39894a=_0x3c7e0c,_0x10465d=_0x2c6a1f(_0x4455fe);switch(_0x10465d){case _0x39894a(0x231):return'n';case'aliasedNodeId':return'na';case _0x39894a(0x190):return _0x39894a(0x1fc);case'browsePath':return'b';case'aliasedBrowsePath':return'ab';default:return't';}}function _0x4a8a78(_0x1daf83){const _0x234080=_0x3c7e0c;let _0x4b4ed0;switch(_0x1daf83){case'n':_0x4b4ed0=_0x234080(0x231);break;case'na':_0x4b4ed0=_0x234080(0x33c);break;case _0x234080(0x1fc):_0x4b4ed0=_0x234080(0x190);break;case'b':_0x4b4ed0=_0x234080(0x1e4);break;case'ab':_0x4b4ed0='aliasedBrowsePath';break;}return _0x4b4ed0;}function _0xd54234(_0x161946){const _0x555dee=_0x3c7e0c;switch(_0x161946){case _0x555dee(0x231):return'n';case'aliasedNodeId':return'na';case _0x555dee(0x190):return _0x555dee(0x1fc);case _0x555dee(0x1e4):return'b';case'aliasedBrowsePath':return'ab';default:return't';}}const _0x2543ba=(_0x6dd807,_0x60c875)=>_0x4404e8(void 0x0,[_0x6dd807,_0x60c875],void 0x0,function*({endpointNode:_0x5e8976,endpoint:_0x8e8e},_0x522305){const _0x14dd41=_0x3c7e0c,_0x583589=_0x5f1acf('/checkNodeId'),_0x206bde=_0x5e8976['id'],_0x1b2754=RED['nodes'][_0x14dd41(0x2de)](_0x206bde);console['log'](_0x1b2754[_0x14dd41(0x1fa)]),_0x1b2754[_0x14dd41(0x1fa)];const _0x5ab2ee=_0x5e8976[_0x14dd41(0x1fa)],_0x2399e1=yield fetch(_0x583589,{'method':_0x14dd41(0x20a),'body':JSON[_0x14dd41(0x353)]({'endpointNode':_0x5e8976,'endpoint':_0x8e8e,'nodeId':_0x522305,'namespaceAliases':_0x5ab2ee}),'headers':{'Content-Type':_0x14dd41(0x30d)}}),_0x47690c=yield _0x2399e1[_0x14dd41(0x1ec)]();return{'json':_0x47690c,'data':_0x2399e1};}),_0x426cff=(_0x55913d,_0x9e8ae3,_0x502a5e,_0x4a43f3)=>_0x4404e8(void 0x0,[_0x55913d,_0x9e8ae3,_0x502a5e,_0x4a43f3],void 0x0,function*({endpointNode:_0x21ce90,endpoint:_0x475860},_0x2433d2,_0x1964c7,_0x1dbebe){const _0x40d442=_0x3c7e0c,_0x23edae=_0x1964c7[_0x40d442(0x2fd)](),{json:_0x3ebced,data:_0xb8f2b6}=yield _0x2543ba({'endpointNode':_0x21ce90,'endpoint':_0x475860},_0x23edae),_0x290b15=(_0x289bd4,_0x3a263f)=>{const _0x1afbb3=_0x40d442;_0x1dbebe[_0x1afbb3(0x273)](_0x289bd4)[_0x1afbb3(0x17b)](_0x1afbb3(0x219))[_0x1afbb3(0x17b)](_0x3a263f),_0x1dbebe[_0x1afbb3(0x1d9)](),setTimeout(()=>{const _0x5c8efd=_0x1afbb3;_0x1dbebe[_0x5c8efd(0x302)](_0x3a263f),_0x1dbebe[_0x5c8efd(0x1b5)]();},0xbb8);};if(_0xb8f2b6['status']!==0xc8)return _0x290b15(_0x40d442(0x261)+_0x23edae,_0x40d442(0x1e8)),![];else{if(_0x3ebced[_0x40d442(0x309)][_0x40d442(0x1f8)](/Good/)){const _0x41d307=_0x4dab60(_0x3ebced);_0x1964c7[_0x40d442(0x216)]('title',_0x41d307);const _0x448d40=_0x338e88(_0x3ebced,_0x2433d2);return _0x1964c7[_0x40d442(0x2fd)](_0x448d40),_0x1964c7[_0x40d442(0x1be)]('change'),_0x290b15(_0x40d442(0x303),'ok'),!![];}else return _0x1964c7[_0x40d442(0x2fd)](''+_0x23edae),_0x290b15(_0x3ebced[_0x40d442(0x309)]+'\x20'+_0xb8f2b6['statusText'],_0x40d442(0x1e8)),![];}});function _0x207c21(_0x4654a6,_0x4bbbe4){return _0x4404e8(this,void 0x0,void 0x0,function*(){const _0x4e1b73=_0x2e19,_0x52ee0a=_0x4654a6[_0x4e1b73(0x27b)]('value'),_0x5f174e=yield _0x1328a7(_0x4bbbe4,_0x52ee0a,_0x3304df),_0x104dc3=yield _0x1328a7(_0x4bbbe4,_0x52ee0a,_0x4d84b9);return{'references':[..._0x5f174e[_0x4e1b73(0x211)],..._0x104dc3[_0x4e1b73(0x211)]]};});}const _0x2e950e={'referenceTypeId':_0x352878(_0x3c7e0c(0x175)),'includeSubtypes':!![],'browseDirection':_0x357ff7[_0x3c7e0c(0x186)],'nodeClassMask':_0x1fce42[_0x3c7e0c(0x2ff)]|_0x1fce42[_0x3c7e0c(0x236)]|_0x1fce42[_0x3c7e0c(0x23f)]|_0x1fce42['VariableType'],'resultMask':0x3f};function _0x537b36(_0x19be16,_0xa524d1){return _0x4404e8(this,void 0x0,void 0x0,function*(){const _0x41fb18=_0x2e19,_0x1db90f=_0x19be16[_0x41fb18(0x27b)]('value'),_0x4290db=yield _0x1328a7(_0xa524d1,_0x1db90f,_0x2e950e);return _0x4290db;});}const _0x29cd06=_0x4fca15=>{const _0x476a4d=_0x3c7e0c;var _0xe60dd1,_0x278866,_0xff49b6,_0x1c026d;if(!_0x4fca15||!_0x4fca15[_0x476a4d(0x231)]){const _0x5a7bfa=$('<li><i\x20class=\x22fa\x20fa-error\x22\x20style=\x22color:red;\x22></i>no\x20reference\x20!<ul></ul></li>');return _0x5a7bfa;}const _0x282ed0=_0x4fca15[_0x476a4d(0x231)]['toString'](),_0x5db93d=((_0xe60dd1=_0x4fca15[_0x476a4d(0x26d)])===null||_0xe60dd1===void 0x0?void 0x0:_0xe60dd1['text'])||((_0x278866=_0x4fca15[_0x476a4d(0x2f6)])===null||_0x278866===void 0x0?void 0x0:_0x278866[_0x476a4d(0x2b1)])||_0x4fca15[_0x476a4d(0x231)][_0x476a4d(0x19f)](),{icon:_0x87ee5c,color:_0xcfa5ea}=_0x438340(_0x4fca15),_0x75eb45='('+_0x4fca15[_0x476a4d(0x231)]['toString']()+')\x20'+(((_0xff49b6=_0x4fca15['browseName'])===null||_0xff49b6===void 0x0?void 0x0:_0xff49b6[_0x476a4d(0x2b1)])||((_0x1c026d=_0x4fca15[_0x476a4d(0x26d)])===null||_0x1c026d===void 0x0?void 0x0:_0x1c026d['text'])||''),_0x4496fc=$(_0x476a4d(0x324)+_0x4fca15['nodeId']['toString']()+_0x476a4d(0x228)+_0x75eb45+'><i\x20class=\x22fa\x20'+_0x87ee5c+'\x22\x20style=\x22color:'+_0xcfa5ea+_0x476a4d(0x224)+_0x5db93d+'</span><ul></ul></li>');return _0x4496fc[_0x476a4d(0x17b)](_0x476a4d(0x1a3)),_0x4496fc[_0x476a4d(0x27b)](_0x476a4d(0x15b),_0x282ed0),_0x4496fc[_0x476a4d(0x27b)](_0x476a4d(0x2ce),_0x4fca15),_0x4496fc;},_0x1ceea4=(_0x1c7158,_0x25d21a)=>{const _0x448b0c=_0x3c7e0c;return _0x25d21a['find'](_0x448b0c(0x21a)+_0x1c7158+'\x22]');},_0xe0631c=(_0x20f3c2,_0x28525e)=>{const _0x210f34=_0x3c7e0c;_0x20f3c2[_0x210f34(0x1ac)][_0x210f34(0x2ab)]('li\x20>\x20.tree-text')[_0x210f34(0x302)](_0x210f34(0x205)),_0x28525e[_0x210f34(0x2ab)](_0x210f34(0x194))['addClass'](_0x210f34(0x205));},_0x207616=(_0x4b2a11,_0x384912,_0x240882)=>_0x4404e8(void 0x0,void 0x0,void 0x0,function*(){const _0x32687e=_0x3c7e0c;let _0x7aac1b=_0x240882['children'](_0x32687e(0x16b));_0x384912[_0x32687e(0x2bb)][_0x32687e(0x25f)]||[];const _0x41214e=_0x384912[_0x32687e(0x340)]||[];if(_0x41214e[_0x32687e(0x342)]===0x0)return;for(const _0xcfe39c of _0x41214e){_0x7aac1b[_0x32687e(0x1a5)](_0x32687e(0x1a3))&&(yield _0xfcc521(_0x4b2a11,_0x7aac1b));const _0xb8302a=_0x1ceea4(_0xcfe39c,_0x7aac1b);if(_0xb8302a[_0x32687e(0x342)]===0x0)return;_0x7aac1b=_0xb8302a;}_0xe0631c(_0x4b2a11,_0x7aac1b),_0x584d09(_0x4b2a11[_0x32687e(0x321)],_0x7aac1b);});function _0x584d09(_0x3c7708,_0x2752bb){const _0x117e82=_0x3c7e0c,_0x37b54f=_0x2752bb['position']()['top'],_0x5ba4ce=_0x3c7708[_0x117e82(0x174)]();if(_0x5ba4ce==undefined)return;const _0x4eb9ce=_0x5ba4ce+_0x37b54f-_0x3c7708[_0x117e82(0x197)]()/0x2+_0x2752bb[_0x117e82(0x197)]()/0x2;_0x3c7708['animate']({'scrollTop':_0x4eb9ce},0x1f4);}const _0x18136b=(_0x330e61,_0x414823)=>_0x4404e8(void 0x0,void 0x0,void 0x0,function*(){const _0x3f1962=_0x3c7e0c,_0xe9b3a0=_0x330e61[_0x3f1962(0x251)][_0x3f1962(0x2fd)](),_0x50df6d={'nodeId':_0xe9b3a0,'rootNodeId':_0x414823[_0x3f1962(0x231)],'isType':_0x330e61[_0x3f1962(0x249)][_0x3f1962(0x1da)]||![]},_0x9f0998=_0x3cacf6(_0x330e61),_0x524cb8=yield _0x2e5692(_0x9f0998,_0x50df6d);if(!_0x524cb8)return;yield _0x207616(_0x330e61,_0x524cb8,_0x330e61[_0x3f1962(0x1ac)]);});function _0x4380b0(_0xc932e1,_0x49d98e,_0x5db59a,_0x1ffa02){return _0x4404e8(this,void 0x0,void 0x0,function*(){const _0x582006=_0x2e19;if(_0x49d98e[_0x582006(0x1a5)](_0x582006(0x32e))){console[_0x582006(0x328)](_0x582006(0x154));return;}if(_0x49d98e[_0x582006(0x1a5)](_0x582006(0x2b7))){console[_0x582006(0x328)](_0x582006(0x199));return;}_0x49d98e['addClass'](_0x582006(0x2b7)),_0x49d98e[_0x582006(0x330)](_0x582006(0x270));try{_0x49d98e[_0x582006(0x256)]('ul')[_0x582006(0x166)]();const {references:_0x3a01a1}=yield _0x5db59a(_0x49d98e,_0x1ffa02);_0x3a01a1[_0x582006(0x18d)]((_0x305205,_0xcf01bc)=>{const _0x3b594c=_0x582006;var _0x3c7c98,_0x2a4e35;return(((_0x3c7c98=_0x305205[_0x3b594c(0x2f6)])===null||_0x3c7c98===void 0x0?void 0x0:_0x3c7c98['name'])||'')['localeCompare'](((_0x2a4e35=_0xcf01bc[_0x3b594c(0x2f6)])===null||_0x2a4e35===void 0x0?void 0x0:_0x2a4e35[_0x3b594c(0x2b1)])||'');});for(const _0x697de5 of _0x3a01a1){if(_0xc932e1[_0x582006(0x249)][_0x582006(0x333)]&&!_0xc932e1[_0x582006(0x249)][_0x582006(0x333)](_0x697de5))continue;const _0xd7d07f=_0x29cd06(_0x697de5);_0x49d98e[_0x582006(0x256)]('ul')['append'](_0xd7d07f);}_0x49d98e[_0x582006(0x17b)](_0x582006(0x32e));}catch(_0x4177d1){_0x49d98e[_0x582006(0x256)]('ul')[_0x582006(0x330)](_0x582006(0x28d)+_0x4177d1[_0x582006(0x1f5)]+_0x582006(0x305)),console[_0x582006(0x328)](_0x582006(0x243),_0x4177d1);}_0x49d98e[_0x582006(0x2ab)](_0x582006(0x30e))[_0x582006(0x1c1)](),_0x49d98e[_0x582006(0x302)](_0x582006(0x2b7));});}function _0x3cacf6(_0x21c10c){const _0x2b111e=_0x3c7e0c,_0x551a12={'endpointNode':typeof _0x21c10c[_0x2b111e(0x249)]['endpointNode']===_0x2b111e(0x2f4)?_0x21c10c['options'][_0x2b111e(0x25a)]():_0x21c10c[_0x2b111e(0x249)][_0x2b111e(0x25a)],'endpoint':typeof _0x21c10c['options'][_0x2b111e(0x2d2)]===_0x2b111e(0x2f4)?_0x21c10c[_0x2b111e(0x249)][_0x2b111e(0x2d2)]():_0x21c10c['options'][_0x2b111e(0x2d2)]};return _0x551a12;}function _0xfcc521(_0x217351,_0x42a51f){return _0x4404e8(this,void 0x0,void 0x0,function*(){const _0x584b7f=_0x2e19;if(_0x42a51f[_0x584b7f(0x1a5)](_0x584b7f(0x32e))){_0x42a51f['removeClass'](_0x584b7f(0x1a3))['addClass'](_0x584b7f(0x2f7)),_0x42a51f[_0x584b7f(0x256)]('ul')[_0x584b7f(0x18f)]();return;}const _0x1b5aab=_0x3cacf6(_0x217351),_0x386c48=!_0x217351[_0x584b7f(0x249)]['isTypeRef']?_0x207c21:_0x537b36;try{yield _0x4380b0(_0x217351,_0x42a51f,_0x386c48,_0x1b5aab),_0x42a51f['removeClass'](_0x584b7f(0x1a3))['addClass'](_0x584b7f(0x2f7));}catch(_0x1994a4){_0x42a51f['removeClass'](_0x584b7f(0x1a3))[_0x584b7f(0x17b)](_0x584b7f(0x2f7)),console['log'](_0x584b7f(0x33e),_0x1994a4);}});}const _0x1d9eea={'browseName':{'namespaceIndex':0x0,'name':_0x3c7e0c(0x1c9)},'nodeClass':_0x3c7e0c(0x329),'nodeId':'ns=0;i=85','displayName':{'text':'Objects'},'typeDefinition':_0x3ab3c3},_0x5de7bc=()=>{const _0x5d8dee=_0x3c7e0c;$[_0x5d8dee(0x2dd)](_0x5d8dee(0x32f),{'options':{'endpointNode':()=>({'endpoint':_0x5d8dee(0x1cf)}),'endpoint':()=>undefined,'parentNode':()=>_0x1d9eea,'filter':()=>!![],'isTypeRef':![]},'resolveParentNode'(){return _0x4404e8(this,void 0x0,void 0x0,function*(){const _0x4cd134=_0x2e19,_0x45e729=this;if(_0x45e729['__parentNode']==undefined){const _0x531780=typeof _0x45e729['options'][_0x4cd134(0x20d)]===_0x4cd134(0x2f4)?_0x45e729[_0x4cd134(0x249)][_0x4cd134(0x20d)][_0x4cd134(0x348)](_0x45e729):_0x45e729[_0x4cd134(0x249)][_0x4cd134(0x20d)];if(_0x531780 instanceof Promise){const _0x452152=yield _0x531780;_0x45e729[_0x4cd134(0x176)]=_0x452152;}else _0x45e729[_0x4cd134(0x176)]=_0x531780;}return _0x45e729['__parentNode']||_0x1d9eea;});},'reset'(){return _0x4404e8(this,void 0x0,void 0x0,function*(){const _0x2aed92=_0x2e19,_0x2c520a=this,_0x57bc25=_0x2c520a;_0x57bc25[_0x2aed92(0x176)]=undefined,_0x2c520a[_0x2aed92(0x1ac)][_0x2aed92(0x166)]();const _0x4d4882=yield this[_0x2aed92(0x1b8)](),_0xa7a56a=_0x29cd06(_0x4d4882);_0x2c520a['$tree'][_0x2aed92(0x330)](_0xa7a56a),_0x2c520a[_0x2aed92(0x2c5)]=_0x4d4882;});},'verify'(_0x3644b2){const _0x22c02a=this,_0x1e257c=_0x3cacf6(_0x22c02a);_0x426cff(_0x1e257c,_0x3644b2,_0x22c02a['$input'],_0x22c02a['$info'])['then'](_0x39d1a4=>{const _0x27ed78=_0x2e19;!_0x39d1a4?_0x22c02a['$combo'][_0x27ed78(0x17b)](_0x27ed78(0x1c7)):_0x22c02a[_0x27ed78(0x31d)][_0x27ed78(0x302)](_0x27ed78(0x1c7));});},'_hideMenu'(_0x3ff35c){const _0x3fd1c1=_0x5d8dee,_0xc815f6=this;$(document)['off'](_0x3fd1c1(0x318)),_0x3ff35c['hide'](),_0x3ff35c[_0x3fd1c1(0x285)]({'height':'auto'});if(_0x3ff35c['opts']['multiple']){var _0x459479=[];_0x3ff35c[_0x3fd1c1(0x2ab)](_0x3fd1c1(0x245))[_0x3fd1c1(0x254)](function(){const _0x309538=_0x3fd1c1;$(this)[_0x309538(0x267)](_0x309538(0x2cc))&&_0x459479[_0x309538(0x2b0)]($(this)['data'](_0x309538(0x15b)));}),_0x3ff35c[_0x3fd1c1(0x28c)](_0x459479);}_0xc815f6[_0x3fd1c1(0x338)]['is'](':visible')?_0xc815f6[_0x3fd1c1(0x251)][_0x3fd1c1(0x1be)]('focus'):_0xc815f6[_0x3fd1c1(0x2ef)][_0x3fd1c1(0x1be)](_0x3fd1c1(0x1cd));},'_createMenu'(_0x1f52f5,_0x49f2d4,_0x143179){const _0x26738e=_0x5d8dee;var _0x198690=this;const _0x1aef5b=$('<div>')[_0x26738e(0x17b)](_0x26738e(0x347));return _0x1aef5b[_0x26738e(0x220)]=_0x49f2d4,_0x1aef5b['callback']=_0x143179,_0x1f52f5[_0x26738e(0x233)](_0x2f0710=>{const _0x5264d2=_0x26738e;typeof _0x2f0710==='string'&&(_0x2f0710={'value':_0x2f0710,'label':_0x2f0710});var _0x142d77=$('<a\x20href=\x22#\x22></a>')[_0x5264d2(0x216)](_0x5264d2(0x15b),_0x2f0710['value'])[_0x5264d2(0x2dc)](_0x1aef5b);_0x2f0710[_0x5264d2(0x2be)]&&_0x142d77[_0x5264d2(0x273)](_0x2f0710[_0x5264d2(0x2be)]);_0x2f0710[_0x5264d2(0x2ec)]&&_0x142d77[_0x5264d2(0x267)](_0x5264d2(0x2ec),_0x2f0710['title']);if(_0x2f0710[_0x5264d2(0x2cb)]){if(_0x2f0710['icon'][_0x5264d2(0x16a)]('<')===0x0)$(_0x2f0710[_0x5264d2(0x2cb)])[_0x5264d2(0x1ad)](_0x142d77);else _0x2f0710[_0x5264d2(0x2cb)][_0x5264d2(0x16a)]('/')!==-0x1?$(_0x5264d2(0x183),{'class':_0x5264d2(0x1c5),'style':_0x5264d2(0x34d)+_0x2f0710['icon']+');\x20-webkit-mask-image:\x20url('+_0x2f0710[_0x5264d2(0x2cb)]+');'})[_0x5264d2(0x1ad)](_0x142d77):$(_0x5264d2(0x183),{'class':'red-ui-typedInput-icon\x20'+_0x2f0710[_0x5264d2(0x2cb)]})[_0x5264d2(0x1ad)](_0x142d77);}else _0x142d77[_0x5264d2(0x285)]({'paddingLeft':'18px'});!_0x2f0710[_0x5264d2(0x2cb)]&&!_0x2f0710['label']&&_0x142d77[_0x5264d2(0x273)](_0x2f0710[_0x5264d2(0x15b)]);var _0x4f55b7;_0x49f2d4['multiple']&&(_0x4f55b7=$(_0x5264d2(0x2a0))[_0x5264d2(0x285)](_0x5264d2(0x1ed),_0x5264d2(0x157))[_0x5264d2(0x27b)](_0x5264d2(0x15b),_0x2f0710['value'])[_0x5264d2(0x1ad)](_0x142d77)['on'](_0x5264d2(0x264),function(_0x19e21a){_0x19e21a['preventDefault']();})),_0x142d77['on']('click',function(_0x40c231){const _0x37721c=_0x5264d2;_0x40c231[_0x37721c(0x298)](),_0x40c231[_0x37721c(0x2fb)](),!_0x49f2d4['multiple']?(_0x143179(_0x2f0710[_0x37721c(0x15b)]),_0x198690[_0x37721c(0x1b3)](_0x1aef5b)):_0x4f55b7['prop']('checked',!_0x4f55b7[_0x37721c(0x267)](_0x37721c(0x2cc)));});}),_0x1aef5b[_0x26738e(0x285)]({'display':'none'}),_0x1aef5b['on'](_0x26738e(0x21f),function(_0x1b49a5){const _0x5b1fb7=_0x26738e;if(_0x1b49a5[_0x5b1fb7(0x33a)]===0x28)_0x1b49a5[_0x5b1fb7(0x298)](),$(this)[_0x5b1fb7(0x256)](_0x5b1fb7(0x1e1))[_0x5b1fb7(0x250)]()[_0x5b1fb7(0x1be)](_0x5b1fb7(0x1cd));else{if(_0x1b49a5[_0x5b1fb7(0x33a)]===0x26)_0x1b49a5[_0x5b1fb7(0x298)](),$(this)['children'](':focus')[_0x5b1fb7(0x313)]()[_0x5b1fb7(0x1be)](_0x5b1fb7(0x1cd));else _0x1b49a5['keyCode']===0x1b&&(_0x1b49a5['preventDefault'](),_0x198690[_0x5b1fb7(0x1b3)](_0x1aef5b));}_0x1b49a5[_0x5b1fb7(0x2fb)]();}),_0x1aef5b;},'disarmClick':![],'_showMenu'(_0x55e979,_0x15e116){const _0x26b618=_0x5d8dee;if(this['disarmClick']){this['disarmClick']=![];return;}var _0xb32d3d=this,_0x2fad11=_0x15e116[_0x26b618(0x2fa)](),_0x73a816=_0x15e116['height'](),_0x44887b=_0x55e979[_0x26b618(0x197)](),_0x5b51b1=_0x73a816+_0x2fad11[_0x26b618(0x1a2)];_0x5b51b1+_0x44887b-$(document)[_0x26b618(0x174)]()>$(window)[_0x26b618(0x197)]()&&(_0x5b51b1-=_0x5b51b1+_0x44887b-$(window)[_0x26b618(0x197)]()+0x5),_0x5b51b1<0x0&&(_0x55e979[_0x26b618(0x197)](_0x44887b+_0x5b51b1),_0x5b51b1=0x0),_0x55e979[_0x26b618(0x285)]({'top':_0x5b51b1+'px','left':_0x2fad11[_0x26b618(0x180)]+'px'}),_0x55e979['slideDown'](0x64),this[_0x26b618(0x189)](function(){const _0x271d83=_0x26b618;_0xb32d3d[_0x271d83(0x2a5)][_0x271d83(0x17b)](_0x271d83(0x240)),$(document)['on'](_0x271d83(0x318),function(_0x191abb){const _0xf8357e=_0x271d83;!$(_0x191abb[_0xf8357e(0x1b7)])[_0xf8357e(0x19b)](_0x55e979)['length']&&_0xb32d3d['_hideMenu'](_0x55e979),$(_0x191abb[_0xf8357e(0x1b7)])[_0xf8357e(0x19b)](_0x15e116)['length']&&(_0xb32d3d[_0xf8357e(0x1ce)]=!![],_0x191abb[_0xf8357e(0x298)]());});});},'_showTypeMenu'(){const _0x332107=_0x5d8dee,_0x19412c=this;this[_0x332107(0x2e1)](_0x19412c[_0x332107(0x263)],_0x19412c[_0x332107(0x31d)]),_0x19412c[_0x332107(0x321)]['hide']();const _0x36380c=_0x19412c[_0x332107(0x1dd)];var _0x83ba1=_0x19412c[_0x332107(0x263)][_0x332107(0x2ab)]('[value=\x27'+_0x36380c+'\x27');setTimeout(function(){const _0x2d5389=_0x332107;_0x83ba1[_0x2d5389(0x1be)](_0x2d5389(0x1cd));},0x78);},'_initMenu'(){const _0x27f2e4=_0x5d8dee,_0x3f390c=this;_0x3f390c[_0x27f2e4(0x2ef)]['attr']('tabindex',-0x1),_0x3f390c[_0x27f2e4(0x2ef)]['on'](_0x27f2e4(0x2ee),function(_0x218572){const _0x3fec85=_0x27f2e4;_0x218572[_0x3fec85(0x298)]();});_0x3f390c[_0x27f2e4(0x263)]&&_0x3f390c[_0x27f2e4(0x263)][_0x27f2e4(0x1c1)]();const _0x4c1d55=[{'label':_0x27f2e4(0x273),'value':'t','title':_0x27f2e4(0x2c9),'icon':_0x27f2e4(0x2b4)},{'label':_0x27f2e4(0x257),'value':_0x27f2e4(0x2aa),'title':_0x27f2e4(0x187),'icon':_0x27f2e4(0x160)},{'label':_0x27f2e4(0x1b6),'value':'n','icon':_0x27f2e4(0x344)},{'label':_0x27f2e4(0x34f),'value':'na','icon':_0x27f2e4(0x229)},{'label':_0x27f2e4(0x1a8),'value':'nsu','icon':_0x27f2e4(0x1f3)},{'label':_0x27f2e4(0x193),'value':'b','icon':_0x27f2e4(0x357)},{'label':_0x27f2e4(0x2db),'value':'ab','icon':'<i\x20class=\x22fa\x20fa-bookmark\x22/><i\x20class=\x22fa\x20fa-fighter-jet\x22/> '}],_0x474cf6=_0x1e52db(_0x3f390c[_0x27f2e4(0x251)]['val']()),_0x4d373f=_0x4c1d55['find'](_0x32d3df=>_0x32d3df['value']===_0x474cf6);_0x3f390c['$selectLabel'][_0x27f2e4(0x166)]()[_0x27f2e4(0x330)](_0x27f2e4(0x185)+((_0x4d373f===null||_0x4d373f===void 0x0?void 0x0:_0x4d373f['title'])||'')+_0x27f2e4(0x25d)+((_0x4d373f===null||_0x4d373f===void 0x0?void 0x0:_0x4d373f['icon'])||'')+_0x27f2e4(0x320)),_0x3f390c[_0x27f2e4(0x1dd)]=_0x474cf6;const _0x51b221=this;_0x3f390c[_0x27f2e4(0x263)]=this['_createMenu'](_0x4c1d55,{},_0x2602b1=>{const _0x422f69=_0x27f2e4,_0x46593d=_0x4a8a78(_0x2602b1);_0x46593d&&_0x51b221['verify'](_0x46593d);const _0x33c9bf=_0x4c1d55[_0x422f69(0x2ab)]