|
Static Value-Flow Analysis
|
This is the complete list of members for SVF::SVFIR, including all inherited members.
| addAddrStmt(NodeID src, NodeID dst) | SVF::SVFIR | private |
| addArgValNode(NodeID i, u32_t argNo, const ICFGNode *icfgNode, const FunObjVar *callGraphNode, const SVFType *type) | SVF::SVFIR | inlineprivate |
| addBinaryOPStmt(NodeID op1, NodeID op2, NodeID dst, u32_t opcode) | SVF::SVFIR | private |
| addBlackHoleAddrStmt(NodeID node) | SVF::SVFIR | private |
| addBlackholeObjNode() | SVF::SVFIR | inlineprivate |
| addBlackholePtrNode() | SVF::SVFIR | inlineprivate |
| addBranchStmt(NodeID br, NodeID cond, const BranchStmt::SuccAndCondPairVec &succs) | SVF::SVFIR | private |
| addCallPE(NodeID src, NodeID dst, const CallICFGNode *cs, const FunEntryICFGNode *entry) | SVF::SVFIR | private |
| addCallSite(const CallICFGNode *call) | SVF::SVFIR | inlineprivate |
| addCallSiteArgs(CallICFGNode *callBlockNode, const ValVar *arg) | SVF::SVFIR | inlineprivate |
| addCallSiteRets(RetICFGNode *retBlockNode, const SVFVar *arg) | SVF::SVFIR | inlineprivate |
| addCmpStmt(NodeID op1, NodeID op2, NodeID dst, u32_t predict) | SVF::SVFIR | private |
| addConstantAggObjNode(const NodeID i, ObjTypeInfo *ti, const SVFType *type, const ICFGNode *node) | SVF::SVFIR | inlineprivate |
| addConstantAggValNode(const NodeID i, const ICFGNode *icfgNode, const SVFType *svfType) | SVF::SVFIR | inlineprivate |
| addConstantDataObjNode(const NodeID i, ObjTypeInfo *ti, const SVFType *type, const ICFGNode *node) | SVF::SVFIR | inlineprivate |
| addConstantDataValNode(const NodeID i, const ICFGNode *icfgNode, const SVFType *type) | SVF::SVFIR | inlineprivate |
| addConstantFPObjNode(NodeID i, ObjTypeInfo *ti, double dval, const SVFType *type, const ICFGNode *node) | SVF::SVFIR | inlineprivate |
| addConstantFPValNode(const NodeID i, double dval, const ICFGNode *icfgNode, const SVFType *type) | SVF::SVFIR | inlineprivate |
| addConstantIntObjNode(NodeID i, ObjTypeInfo *ti, const std::pair< s64_t, u64_t > &intValue, const SVFType *type, const ICFGNode *node) | SVF::SVFIR | inlineprivate |
| addConstantIntValNode(NodeID i, const std::pair< s64_t, u64_t > &intValue, const ICFGNode *icfgNode, const SVFType *type) | SVF::SVFIR | inlineprivate |
| addConstantNullPtrObjNode(const NodeID i, ObjTypeInfo *ti, const SVFType *type, const ICFGNode *node) | SVF::SVFIR | inlineprivate |
| addConstantNullPtrValNode(const NodeID i, const ICFGNode *icfgNode, const SVFType *type) | SVF::SVFIR | inlineprivate |
| addConstantObjNode() | SVF::SVFIR | inlineprivate |
| addCopyStmt(NodeID src, NodeID dst, CopyStmt::CopyKind type) | SVF::SVFIR | private |
| addDummyObjNode(const SVFType *type) | SVF::SVFIR | inline |
| addDummyObjNode(NodeID i, const SVFType *type) | SVF::SVFIR | inlineprivate |
| addDummyValNode() | SVF::SVFIR | inline |
| addDummyValNode(NodeID i, const ICFGNode *node) | SVF::SVFIR | inlineprivate |
| addEdge(SVFVar *src, SVFVar *dst, SVFStmt *edge) | SVF::IRGraph | protected |
| addFIObjNode(NodeID i, ObjTypeInfo *ti, const SVFType *type, const ICFGNode *node) | SVF::SVFIR | inlineprivate |
| addFunArgs(const FunObjVar *fun, const SVFVar *arg) | SVF::SVFIR | inlineprivate |
| addFunObjNode(NodeID id, ObjTypeInfo *ti, const SVFType *type, const ICFGNode *node) | SVF::SVFIR | inlineprivate |
| addFunRet(const FunObjVar *fun, const SVFVar *ret) | SVF::SVFIR | inlineprivate |
| addFunValNode(NodeID i, const ICFGNode *icfgNode, const FunObjVar *funObjVar, const SVFType *type) | SVF::SVFIR | inlineprivate |
| addGepObjNode(const BaseObjVar *baseObj, const APOffset &apOffset, const NodeID gepId) | SVF::SVFIR | private |
| addGepStmt(NodeID src, NodeID dst, const AccessPath &ap, bool constGep) | SVF::SVFIR | private |
| addGepValNode(NodeID curInst, const ValVar *base, const AccessPath &ap, NodeID i, const SVFType *type, const ICFGNode *node) | SVF::SVFIR | private |
| addGlobalObjNode(const NodeID i, ObjTypeInfo *ti, const SVFType *type, const ICFGNode *node) | SVF::SVFIR | inlineprivate |
| addGlobalPAGEdge(const SVFStmt *edge) | SVF::SVFIR | inlineprivate |
| addGlobalValNode(const NodeID i, const ICFGNode *icfgNode, const SVFType *svfType) | SVF::SVFIR | inlineprivate |
| addGNode(NodeID id, NodeType *node) | SVF::GenericGraph< SVFVar, SVFStmt > | inline |
| addHeapObjNode(NodeID i, ObjTypeInfo *ti, const SVFType *type, const ICFGNode *node) | SVF::SVFIR | inlineprivate |
| addIndirectCallsites(const CallICFGNode *cs, NodeID funPtr) | SVF::SVFIR | inlineprivate |
| addLoadStmt(NodeID src, NodeID dst) | SVF::SVFIR | private |
| addNode(SVFVar *node) | SVF::IRGraph | inlineprotected |
| addNormalGepStmt(NodeID src, NodeID dst, const AccessPath &ap) | SVF::SVFIR | private |
| addObjNode(NodeID i, ObjTypeInfo *ti, const SVFType *type, const ICFGNode *node) | SVF::SVFIR | inlineprivate |
| addObjNode(SVFVar *node) | SVF::SVFIR | inlineprivate |
| addPhiStmt(NodeID res, NodeID opnd, const ICFGNode *pred) | SVF::SVFIR | private |
| addRetNode(NodeID i, const FunObjVar *callGraphNode, const SVFType *type, const ICFGNode *icn) | SVF::SVFIR | inlineprivate |
| addRetNode(const FunObjVar *, SVFVar *node) | SVF::SVFIR | inlineprivate |
| addRetPE(NodeID src, NodeID dst, const CallICFGNode *cs, const FunExitICFGNode *exit) | SVF::SVFIR | private |
| addSelectStmt(NodeID res, NodeID op1, NodeID op2, NodeID cond) | SVF::SVFIR | private |
| addStackObjNode(NodeID i, ObjTypeInfo *ti, const SVFType *type, const ICFGNode *node) | SVF::SVFIR | inlineprivate |
| addStInfo(StInfo *stInfo) | SVF::IRGraph | inline |
| addStoreStmt(NodeID src, NodeID dst, const ICFGNode *val) | SVF::SVFIR | private |
| addThreadForkPE(NodeID src, NodeID dst, const CallICFGNode *cs, const FunEntryICFGNode *entry) | SVF::SVFIR | private |
| addThreadJoinPE(NodeID src, NodeID dst, const CallICFGNode *cs, const FunExitICFGNode *exit) | SVF::SVFIR | private |
| addToStmt2TypeMap(SVFStmt *edge) | SVF::SVFIR | inlineprivate |
| addToSVFStmtList(ICFGNode *inst, SVFStmt *edge) | SVF::SVFIR | inline |
| addToTypeLocSetsMap(NodeID argId, SVFTypeLocSetsPair &locSets) | SVF::SVFIR | inline |
| addTypeInfo(const SVFType *ty) | SVF::IRGraph | inline |
| addUnaryOPStmt(NodeID src, NodeID dst, u32_t opcode) | SVF::SVFIR | private |
| addValNode(NodeID i, const SVFType *type, const ICFGNode *icfgNode) | SVF::SVFIR | inlineprivate |
| addValNode(SVFVar *node) | SVF::SVFIR | inlineprivate |
| addVarargNode(NodeID i, const FunObjVar *val, const SVFType *type, const ICFGNode *n) | SVF::SVFIR | inlineprivate |
| addVarargNode(const FunObjVar *, SVFVar *node) | SVF::SVFIR | inlineprivate |
| addVariantGepStmt(NodeID src, NodeID dst, const AccessPath &ap) | SVF::SVFIR | private |
| begin() | SVF::GenericGraph< SVFVar, SVFStmt > | inline |
| begin() const | SVF::GenericGraph< SVFVar, SVFStmt > | inline |
| BlackHole enum value | SVF::IRGraph | |
| blackholeSymID() const | SVF::IRGraph | inline |
| BlkPtr enum value | SVF::IRGraph | |
| blkPtrSymID() const | SVF::IRGraph | inline |
| BVDataPTAImpl | SVF::SVFIR | friend |
| callGraph | SVF::SVFIR | private |
| callSiteArgsListMap | SVF::SVFIR | private |
| callsiteHasRet(const RetICFGNode *cs) const | SVF::SVFIR | inline |
| callSiteRetMap | SVF::SVFIR | private |
| callSiteSet | SVF::SVFIR | private |
| CallSiteSet typedef | SVF::SVFIR | |
| CallSiteToFunPtrMap typedef | SVF::SVFIR | |
| candidatePointers | SVF::SVFIR | private |
| chgraph | SVF::SVFIR | private |
| const_iterator typedef | SVF::GenericGraph< SVFVar, SVFStmt > | |
| ConstantObj enum value | SVF::IRGraph | |
| constantSymID() const | SVF::IRGraph | inline |
| createDummyObjTypeInfo(NodeID symId, const SVFType *type) | SVF::IRGraph | |
| createObjTypeInfo(const SVFType *type) | SVF::IRGraph | |
| CSToArgsListMap typedef | SVF::SVFIR | |
| CSToRetMap typedef | SVF::SVFIR | |
| destorySymTable() | SVF::IRGraph | private |
| destroy() | SVF::SVFIR | private |
| dump(std::string name) | SVF::IRGraph | |
| dumpSymTable() | SVF::IRGraph | |
| edgeNum | SVF::GenericGraph< SVFVar, SVFStmt > | |
| EdgeType typedef | SVF::GenericGraph< SVFVar, SVFStmt > | |
| end() | SVF::GenericGraph< SVFVar, SVFStmt > | inline |
| end() const | SVF::GenericGraph< SVFVar, SVFStmt > | inline |
| ExternalPAG | SVF::SVFIR | friend |
| fromFile | SVF::IRGraph | protected |
| funArgsListMap | SVF::SVFIR | private |
| funHasRet(const FunObjVar *func) const | SVF::SVFIR | inline |
| FunObjVarToIDMapTy typedef | SVF::IRGraph | |
| FunPtrToCallSitesMap typedef | SVF::SVFIR | |
| funPtrToCallSitesMap | SVF::SVFIR | private |
| funRetMap | SVF::SVFIR | private |
| FunToArgsListMap typedef | SVF::SVFIR | |
| FunToPAGEdgeSetMap typedef | SVF::SVFIR | |
| FunToRetMap typedef | SVF::SVFIR | |
| GenericGraph() | SVF::GenericGraph< SVFVar, SVFStmt > | inline |
| GepObjVarMap | SVF::SVFIR | private |
| GepValObjMap | SVF::SVFIR | private |
| GepValueVarMap typedef | SVF::SVFIR | |
| getAllFieldsObjVars(const BaseObjVar *obj) | SVF::SVFIR | |
| getAllFieldsObjVars(NodeID id) | SVF::SVFIR | |
| getAllValidPtrs() | SVF::SVFIR | inline |
| getBaseObject(NodeID id) const | SVF::SVFIR | inline |
| getBaseObjVar(NodeID id) const | SVF::SVFIR | inline |
| getBaseValVar(NodeID id) const | SVF::SVFIR | inline |
| getBlackHoleNode() const | SVF::IRGraph | inline |
| getBlkPtr() const | SVF::IRGraph | inline |
| getCallGraph() | SVF::SVFIR | inline |
| getCallSiteArgsList(const CallICFGNode *cs) const | SVF::SVFIR | inline |
| getCallSiteArgsMap() | SVF::SVFIR | inline |
| getCallSiteRet(const RetICFGNode *cs) const | SVF::SVFIR | inline |
| getCallSiteRets() | SVF::SVFIR | inline |
| getCallSiteSet() const | SVF::SVFIR | inline |
| getCHG() | SVF::SVFIR | inline |
| getConstantNode() const | SVF::IRGraph | inline |
| getFieldObjNodeNum() const | SVF::SVFIR | inline |
| getFieldsAfterCollapse(NodeID id) | SVF::SVFIR | |
| getFieldValNodeNum() const | SVF::SVFIR | inline |
| getFIObjVar(const BaseObjVar *obj) const | SVF::SVFIR | inline |
| getFIObjVar(NodeID id) const | SVF::SVFIR | inline |
| getFlattenedElemIdx(const SVFType *T, u32_t origId) | SVF::IRGraph | |
| getFlattenFieldTypes(const SVFStructType *T) | SVF::IRGraph | protected |
| getFlatternedElemType(const SVFType *baseType, u32_t flatten_idx) | SVF::IRGraph | |
| getFunArgsList(const FunObjVar *func) const | SVF::SVFIR | inline |
| getFunArgsMap() | SVF::SVFIR | inline |
| getFunObjVar(const std::string &name) | SVF::SVFIR | |
| getFunPtr(const CallICFGNode *cs) const | SVF::SVFIR | inline |
| getFunRet(const FunObjVar *func) const | SVF::SVFIR | inline |
| getFunRets() | SVF::SVFIR | inline |
| getGepObjNodeMap() | SVF::SVFIR | inline |
| getGepObjVar(const BaseObjVar *baseObj, const APOffset &ap) | SVF::SVFIR | |
| getGepObjVar(NodeID id, const APOffset &ap) | SVF::SVFIR | |
| getGepValVar(NodeID curInst, NodeID base, const AccessPath &ap) const | SVF::SVFIR | |
| getGlobalSVFStmtSet() | SVF::SVFIR | inline |
| getGNode(NodeID id) const | SVF::GenericGraph< SVFVar, SVFStmt > | inline |
| getGraphName() const | SVF::IRGraph | inline |
| getICFG() const | SVF::SVFIR | inline |
| getIndCallSites(NodeID funPtr) const | SVF::SVFIR | inline |
| getIndirectCallsites() const | SVF::SVFIR | inline |
| getIntraPAGEdge(NodeID src, NodeID dst, SVFStmt::PEDGEK kind) | SVF::SVFIR | inline |
| getIntraPAGEdge(SVFVar *src, SVFVar *dst, SVFStmt::PEDGEK kind) | SVF::SVFIR | inline |
| getMaxStructSize() const | SVF::IRGraph | inline |
| getMemToFieldsMap() | SVF::SVFIR | inline |
| getModuleIdentifier() const | SVF::SVFIR | inline |
| getModulusOffset(const BaseObjVar *baseObj, const APOffset &apOffset) | SVF::IRGraph | virtual |
| getNodeNumAfterPAGBuild() const | SVF::IRGraph | inline |
| getNullPtr() const | SVF::IRGraph | inline |
| getNumOfFlattenElements(const SVFType *T) | SVF::IRGraph | |
| getObjectNodeNum() | SVF::IRGraph | |
| getObjTypeInfo(NodeID id) const | SVF::IRGraph | inline |
| getOriginalElemType(const SVFType *baseType, u32_t origId) const | SVF::IRGraph | |
| getPAG(bool buildFromFile=false) | SVF::SVFIR | inlinestatic |
| getPAGEdgeNum() const | SVF::IRGraph | inline |
| getPAGNodeNum() const | SVF::IRGraph | inline |
| getPTAPAGEdgeNum() const | SVF::IRGraph | inline |
| getPTASVFStmtList(const ICFGNode *inst) | SVF::SVFIR | inline |
| getPTASVFStmtSet(SVFStmt::PEDGEK kind) | SVF::SVFIR | inline |
| getReturnNode(const FunObjVar *func) const | SVF::IRGraph | |
| getStInfos() const | SVF::IRGraph | inline |
| getSVFStmtList(const ICFGNode *inst) | SVF::SVFIR | inline |
| getSVFStmtSet(SVFStmt::PEDGEK kind) | SVF::SVFIR | inline |
| getSVFTypes() const | SVF::IRGraph | inline |
| getTotalEdgeNum() const | SVF::GenericGraph< SVFVar, SVFStmt > | inline |
| getTotalNodeNum() const | SVF::GenericGraph< SVFVar, SVFStmt > | inline |
| getTotalSymNum() const | SVF::IRGraph | inline |
| getTypeInfo(const SVFType *T) const | SVF::IRGraph | |
| getTypeLocSetsMap(NodeID argId) | SVF::SVFIR | inline |
| getValueNodeNum() | SVF::IRGraph | |
| getVarargNode(const FunObjVar *func) const | SVF::IRGraph | |
| globSVFStmtSet | SVF::SVFIR | private |
| handleBlackHole(bool b) | SVF::SVFIR | static |
| hasCallSiteArgsMap(const CallICFGNode *cs) const | SVF::SVFIR | inline |
| hasFunArgsList(const FunObjVar *func) const | SVF::SVFIR | inline |
| hasGNode(NodeID id) const | SVF::GenericGraph< SVFVar, SVFStmt > | inline |
| hasLabeledEdge(SVFVar *src, SVFVar *dst, SVFStmt::PEDGEK kind, const ICFGNode *cs) | SVF::IRGraph | protected |
| hasLabeledEdge(SVFVar *src, SVFVar *op1, SVFStmt::PEDGEK kind, const SVFVar *op2) | SVF::IRGraph | protected |
| hasNonlabeledEdge(SVFVar *src, SVFVar *dst, SVFStmt::PEDGEK kind) | SVF::IRGraph | protected |
| hasPTASVFStmtList(const ICFGNode *inst) const | SVF::SVFIR | inline |
| hasSVFStmtList(const ICFGNode *inst) const | SVF::SVFIR | inline |
| hasSVFTypeInfo(const SVFType *T) | SVF::IRGraph | inline |
| icfg | SVF::SVFIR | private |
| icfgNode2PTASVFStmtsMap | SVF::SVFIR | private |
| ICFGNode2SVFStmtsMap typedef | SVF::SVFIR | |
| icfgNode2SVFStmtsMap | SVF::SVFIR | private |
| IDToNodeMap | SVF::GenericGraph< SVFVar, SVFStmt > | protected |
| IDToNodeMapTy typedef | SVF::GenericGraph< SVFVar, SVFStmt > | |
| idToObjTypeInfoMap() | SVF::IRGraph | inline |
| idToObjTypeInfoMap() const | SVF::IRGraph | inline |
| IDToTypeInfoMapTy typedef | SVF::IRGraph | |
| incEdgeNum() | SVF::GenericGraph< SVFVar, SVFStmt > | inline |
| incNodeNum() | SVF::GenericGraph< SVFVar, SVFStmt > | inline |
| indCallSiteToFunPtrMap | SVF::SVFIR | private |
| initialiseCandidatePointers() | SVF::SVFIR | |
| IRGraph(bool buildFromFile) | SVF::IRGraph | inline |
| isBlkObj(NodeID id) | SVF::IRGraph | inlinestatic |
| isBlkObjOrConstantObj(NodeID id) const | SVF::SVFIR | inline |
| SVF::IRGraph::isBlkObjOrConstantObj(NodeID id) | SVF::IRGraph | inlinestatic |
| isBlkPtr(NodeID id) | SVF::IRGraph | inlinestatic |
| isBuiltFromFile() | SVF::IRGraph | inline |
| isConstantObj(NodeID id) const | SVF::SVFIR | inline |
| isConstantSym(NodeID id) | SVF::IRGraph | inlinestatic |
| isFunPtr(NodeID id) const | SVF::SVFIR | inline |
| isIndirectCallSites(const CallICFGNode *cs) const | SVF::SVFIR | inline |
| isNullPtr(NodeID id) | SVF::IRGraph | inlinestatic |
| isPhiNode(const SVFVar *node) const | SVF::SVFIR | inline |
| isValidPointer(NodeID nodeId) const | SVF::SVFIR | |
| isValidTopLevelPtr(const SVFVar *node) | SVF::SVFIR | |
| iterator typedef | SVF::GenericGraph< SVFVar, SVFStmt > | |
| KindToPTASVFStmtSetMap | SVF::IRGraph | protected |
| KindToSVFStmtSetMap | SVF::IRGraph | protected |
| maxStruct | SVF::IRGraph | |
| maxStSize | SVF::IRGraph | |
| MemObjToFieldsMap typedef | SVF::SVFIR | |
| memToFieldsMap | SVF::SVFIR | private |
| moduleIdentifier | SVF::SVFIR | private |
| NodeAccessPath typedef | SVF::SVFIR | |
| NodeAccessPathMap typedef | SVF::SVFIR | |
| nodeNum | SVF::GenericGraph< SVFVar, SVFStmt > | |
| nodeNumAfterPAGBuild | SVF::IRGraph | protected |
| NodeOffset typedef | SVF::SVFIR | |
| NodeOffsetMap typedef | SVF::SVFIR | |
| NodePairSetMap typedef | SVF::SVFIR | |
| NodeToNodeMap typedef | SVF::SVFIR | |
| NodeType typedef | SVF::GenericGraph< SVFVar, SVFStmt > | |
| NullPtr enum value | SVF::IRGraph | |
| nullPtrSymID() const | SVF::IRGraph | inline |
| ObjSymbol enum value | SVF::IRGraph | |
| objTypeInfoMap | SVF::IRGraph | private |
| objVarNum | SVF::IRGraph | protected |
| pag | SVF::SVFIR | privatestatic |
| PAGBuilderFromFile | SVF::SVFIR | friend |
| pagFileName() | SVF::SVFIR | inlinestatic |
| pagReadFromTXT() | SVF::SVFIR | inlinestatic |
| pagReadFromTxt | SVF::SVFIR | privatestatic |
| phiNodeMap | SVF::SVFIR | private |
| PHINodeMap typedef | SVF::SVFIR | |
| print() | SVF::SVFIR | |
| printFlattenFields(const SVFType *type) | SVF::IRGraph | |
| releaseSVFIR() | SVF::SVFIR | inlinestatic |
| removeGNode(NodeType *node) | SVF::GenericGraph< SVFVar, SVFStmt > | inline |
| retFunObjSyms() | SVF::IRGraph | inline |
| RetSymbol enum value | SVF::IRGraph | |
| returnFunObjSymMap | SVF::IRGraph | private |
| setCHG(CommonCHGraph *c) | SVF::SVFIR | inline |
| setICFG(ICFG *i) | SVF::SVFIR | inline |
| setModuleIdentifier(const std::string &moduleIdentifier) | SVF::SVFIR | inline |
| setNodeNumAfterPAGBuild(u32_t num) | SVF::IRGraph | inline |
| setPagFromTXT(const std::string &txt) | SVF::SVFIR | inlinestatic |
| stInfos | SVF::IRGraph | private |
| SVFIR(bool buildFromFile) | SVF::SVFIR | private |
| SVFIRBuilder | SVF::SVFIR | friend |
| SVFStmtList typedef | SVF::SVFIR | |
| SVFStmtSet typedef | SVF::IRGraph | |
| SVFTypeLocSetsPair typedef | SVF::SVFIR | |
| svfTypes | SVF::IRGraph | private |
| SVFTypeSet typedef | SVF::IRGraph | |
| SVFVarList typedef | SVF::SVFIR | |
| SYMTYPE enum name | SVF::IRGraph | |
| totalPTAPAGEdge | SVF::IRGraph | protected |
| totalSymNum | SVF::IRGraph | private |
| TypeBasedHeapCloning | SVF::SVFIR | friend |
| typeLocSetsMap | SVF::SVFIR | private |
| TypeLocSetsMap typedef | SVF::SVFIR | |
| ValSymbol enum value | SVF::IRGraph | |
| valVarNum | SVF::IRGraph | protected |
| varargFunObjSymMap | SVF::IRGraph | private |
| varargFunObjSyms() | SVF::IRGraph | inline |
| VarargSymbol enum value | SVF::IRGraph | |
| view() | SVF::IRGraph | |
| ~GenericGraph() | SVF::GenericGraph< SVFVar, SVFStmt > | inlinevirtual |
| ~IRGraph() | SVF::IRGraph | virtual |
| ~SVFIR() | SVF::SVFIR | inlinevirtual |