diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java index 0e3c62f4c..6b1bacd0b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java @@ -1150,7 +1150,7 @@ public class AVM2Code implements Cloneable { } int ret = posCache.indexOf(address); if (ret == -1) { - throw new ConvertException("Bad jump try conver ofs" + Helper.formatAddress(address) + " ", -1); + throw new ConvertException("Invalid jump to ofs" + Helper.formatAddress(address), -1); } return ret; } @@ -1843,7 +1843,20 @@ public class AVM2Code implements Cloneable { invalidateCache(); } + /** + * @param pos + * @param instruction + */ public void insertInstruction(int pos, AVM2Instruction instruction) { + insertInstruction(pos, instruction, true, false); + } + + public void replaceInstruction(int idx, AVM2Instruction ins, MethodBody body) { + insertInstruction(idx, ins, true, true); + removeInstruction(idx + 1, body); + } + + public void insertInstruction(int pos, AVM2Instruction instruction, boolean preRefsToThis, boolean postRefsToThis) { if (pos < 0) { pos = 0; } @@ -1857,31 +1870,43 @@ public class AVM2Code implements Cloneable { instruction.offset = code.get(pos).offset; } - for (int i = 0; i < pos; i++) { - for (int j = 0; j < code.get(i).definition.operands.length; j++) { - if (code.get(i).definition.operands[j] == AVM2Code.DAT_OFFSET) { - long target = code.get(i).offset + code.get(i).getBytes().length + code.get(i).operands[j]; - if (target >= instruction.offset) { - code.get(i).operands[j] += byteCount; + { + for (int i = 0; i < pos; i++) { + for (int j = 0; j < code.get(i).definition.operands.length; j++) { + if (code.get(i).definition.operands[j] == AVM2Code.DAT_OFFSET) { + long target = code.get(i).offset + code.get(i).getBytes().length + code.get(i).operands[j]; + if (target > instruction.offset) { + code.get(i).operands[j] += byteCount; + } + if (target == instruction.offset && !preRefsToThis) { + code.get(i).operands[j] += byteCount; + } + } } } } - for (int i = pos; i < code.size(); i++) { - for (int j = 0; j < code.get(i).definition.operands.length; j++) { - if (code.get(i).definition.operands[j] == AVM2Code.DAT_OFFSET) { - long target = code.get(i).offset + code.get(i).getBytes().length + code.get(i).operands[j]; - if (target < instruction.offset) { - code.get(i).operands[j] -= byteCount; + { + for (int i = pos; i < code.size(); i++) { + for (int j = 0; j < code.get(i).definition.operands.length; j++) { + if (code.get(i).definition.operands[j] == AVM2Code.DAT_OFFSET) { + long target = code.get(i).offset + code.get(i).getBytes().length + code.get(i).operands[j]; + if (target < instruction.offset) { + code.get(i).operands[j] -= byteCount; + } + if (target == instruction.offset && postRefsToThis) { + code.get(i).operands[j] -= byteCount; + } } } } } - for (int i = pos + 1; i < code.size(); i++) { + for (int i = pos; i < code.size(); i++) { code.get(i).offset += byteCount; } code.add(pos, instruction); + invalidateCache(); } @SuppressWarnings("unchecked") diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Deobfuscator.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Deobfuscator.java deleted file mode 100644 index c82ee8952..000000000 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Deobfuscator.java +++ /dev/null @@ -1,435 +0,0 @@ -/* - * Copyright (C) 2010-2015 JPEXS, All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. - */ -package com.jpexs.decompiler.flash.abc.avm2; - -import com.jpexs.decompiler.flash.SWF; -import com.jpexs.decompiler.flash.abc.ABC; -import com.jpexs.decompiler.flash.abc.AVM2LocalData; -import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; -import com.jpexs.decompiler.flash.abc.avm2.instructions.IfTypeIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.AddIIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.AddIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.DecrementIIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.DecrementIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.IncrementIIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.IncrementIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.ModuloIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.MultiplyIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.NotIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.SubtractIIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.SubtractIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.bitwise.BitAndIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.bitwise.BitOrIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.bitwise.BitXorIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.bitwise.LShiftIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.bitwise.RShiftIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.bitwise.URShiftIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.comparison.EqualsIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.comparison.GreaterEqualsIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.comparison.GreaterThanIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.comparison.LessEqualsIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.comparison.LessThanIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.comparison.StrictEqualsIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.construction.NewFunctionIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.jumps.JumpIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.GetLocalTypeIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.SetLocalIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.SetLocalTypeIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.other.ReturnValueIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.other.ReturnVoidIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.DupIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PopIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushByteIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushDoubleIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushFalseIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushIntIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushNullIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushScopeIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushShortIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushStringIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushTrueIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushUndefinedIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.SwapIns; -import com.jpexs.decompiler.flash.abc.avm2.model.NullAVM2Item; -import com.jpexs.decompiler.flash.abc.avm2.model.ReturnValueAVM2Item; -import com.jpexs.decompiler.flash.abc.types.MethodBody; -import com.jpexs.decompiler.flash.abc.types.MethodInfo; -import com.jpexs.decompiler.flash.abc.types.traits.Trait; -import com.jpexs.decompiler.flash.action.ActionList; -import com.jpexs.decompiler.flash.ecma.EcmaScript; -import com.jpexs.decompiler.graph.Graph; -import com.jpexs.decompiler.graph.GraphTargetItem; -import com.jpexs.decompiler.graph.ScopeStack; -import com.jpexs.decompiler.graph.TranslateException; -import com.jpexs.decompiler.graph.TranslateStack; -import java.util.ArrayList; -import java.util.EmptyStackException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * - * AVM2 Deobfuscator - FIXME!!! Not ready yet! - * - * @author JPEXS - */ -public class AVM2Deobfuscator extends AVM2DeobfuscatorSimple { - - private final int executionLimit = 30000; - - @Override - public void actionListParsed(ActionList actions, SWF swf) { - - } - - @Override - public void deobfuscate(int classIndex, boolean isStatic, int scriptIndex, ABC abc, AVM2ConstantPool cpool, Trait trait, MethodInfo minfo, MethodBody body) throws InterruptedException { - removeUnreachableActions(body.getCode(), cpool, trait, minfo, body); - removeObfuscationIfs(classIndex, isStatic, scriptIndex, abc, cpool, trait, minfo, body); - removeUnreachableActions(body.getCode(), cpool, trait, minfo, body); - removeZeroJumps(body.getCode(), body); - } - - private boolean removeObfuscationIfs(int classIndex, boolean isStatic, int scriptIndex, ABC abc, AVM2ConstantPool cpool, Trait trait, MethodInfo minfo, MethodBody body) { - AVM2Code code = body.getCode(); - if (code.code.size() == 0) { - return false; - } - System.err.println("============================================="); - for (int i = 0; i < code.code.size(); i++) { - ExecutionResult result = new ExecutionResult(); - System.err.println("Execute from " + i); - executeActions(classIndex, isStatic, body, scriptIndex, abc, code, i, code.code.size() - 1, result); - - if (result.idx != -1) { - int newIstructionCount = 1; // jump - if (!result.stack.isEmpty()) { - newIstructionCount++; - } - newIstructionCount += 2 * result.variables.size(); - - if (newIstructionCount * 2 < result.instructionsProcessed) { - AVM2Instruction target = code.code.get(result.idx); - AVM2Instruction prevAction = code.code.get(i); - - for (int variableName : result.variables.keySet()) { - Object value = result.variables.get(variableName); - /*ActionPush push = new ActionPush(variableName); - push.values.add(value);*/ - AVM2Instruction push = makePush(value, cpool); - - code.insertInstruction(i++, push); - push.offset = prevAction.offset; - - code.insertInstruction(i++, push); - prevAction = push; - - /*if (result.defines.contains(variableName)) { - //ActionDefineLocal defineLocal = new ActionDefineLocal(); - AVM2Instruction defineLocal = new AVM2Instruction(prevAction.offset, new SetLocalIns(), new int[]{}); - defineLocal.setAddress(prevAction.getAddress()); - code.addAction(i++, defineLocal); - prevAction = defineLocal; - } else { - ActionSetVariable setVariable = new ActionSetVariable(); - setVariable.setAddress(prevAction.getAddress()); - code.addAction(i++, setVariable); - prevAction = setVariable; - }*/ - AVM2Instruction setVariable = new AVM2Instruction(prevAction.offset, new SetLocalIns(), new int[]{}); - code.insertInstruction(i++, setVariable); - prevAction = setVariable; - } - - if (!result.stack.isEmpty()) { - //ActionPush push = new ActionPush(0); - //push.values.clear(); - long ofs = prevAction.offset; - for (GraphTargetItem graphTargetItem : result.stack) { - //DirectValueActionItem dv = (DirectValueActionItem) graphTargetItem; - //push.values.add(dv.value); - AVM2Instruction push = makePush(cpool, graphTargetItem); - push.offset = ofs; - code.insertInstruction(i++, push); - ofs += push.getBytes().length; - prevAction = push; - } - } - - //ctionJump jump = new ActionJump(0); - AVM2Instruction jump = new AVM2Instruction(prevAction.offset, new JumpIns(), new int[]{0}); - //jump.setAddress(prevAction.getAddress()); - jump.operands[0] = (int) (target.offset - jump.offset - jump.getBytes().length); - code.insertInstruction(i++, jump); - return true; - } - } - } - - return false; - } - - private AVM2LocalData newLocalData(int scriptIndex, ABC abc, AVM2ConstantPool cpool, MethodBody body, boolean isStatic, int classIndex) { - AVM2LocalData localData = new AVM2LocalData(); - localData.isStatic = isStatic; - localData.classIndex = classIndex; - localData.localRegs = new HashMap<>(); - localData.scopeStack = new ScopeStack(); - localData.constants = cpool; - localData.methodInfo = abc.method_info; - localData.methodBody = body; - localData.abc = abc; - localData.localRegNames = new HashMap<>(); - localData.fullyQualifiedNames = new ArrayList<>(); - localData.parsedExceptions = new ArrayList<>(); - localData.finallyJumps = new HashMap<>(); - localData.ignoredSwitches = new HashMap<>(); - localData.ignoredSwitches2 = new ArrayList<>(); - localData.scriptIndex = scriptIndex; - localData.localRegAssignmentIps = new HashMap<>(); - localData.ip = 0; - localData.refs = new HashMap<>(); - localData.code = body.getCode(); - return localData; - } - - private void executeActions(int classIndex, boolean isStatic, MethodBody body, int scriptIndex, ABC abc, AVM2Code code, int idx, int endIdx, ExecutionResult result) { - List output = new ArrayList<>(); - AVM2LocalData localData = newLocalData(scriptIndex, abc, abc.constants, body, isStatic, classIndex); - localData.localRegs.put(0, new NullAVM2Item(null));//this - FixItemCounterTranslateStack stack = new FixItemCounterTranslateStack(""); - int instructionsProcessed = 0; - - try { - while (true) { - if (idx > endIdx) { - break; - } - - AVM2Instruction action = code.code.get(idx); - instructionsProcessed++; - - if (instructionsProcessed > executionLimit) { - break; - } - - /*if (action instanceof ActionDefineLocal) { - GraphTargetItem top = stack.pop(); - String variableName = stack.peek().getResult().toString(); - result.defines.add(variableName); - stack.push(top); - }*/ - if (action.definition instanceof GetLocalTypeIns) { - int regId = ((GetLocalTypeIns) action.definition).getRegisterId(action);//stack.peek().getResult().toString(); - if (!localData.localRegs.containsKey(regId)) { - break; - } - } - - /*if (action instanceof ActionCallFunction) { - String functionName = stack.pop().getResult().toString(); - long numArgs = EcmaScript.toUint32(stack.pop().getResult()); - if (numArgs == 0) { - if (fakeFunctions != null && fakeFunctions.containsKey(functionName)) { - stack.push(new DirectValueActionItem(fakeFunctions.get(functionName))); - } else { - break; - } - } else { - break; - } - } else { - action.translate(localData, stack, output, Graph.SOP_USE_STATIC, ""); - }*/ - System.err.println("Translating " + action); - action.translate(localData, stack, output, Graph.SOP_USE_STATIC, ""); - Class allowedDefs[] = new Class[]{ - PushByteIns.class, - PushShortIns.class, - PushIntIns.class, - PushDoubleIns.class, - PushStringIns.class, - PushNullIns.class, - PushUndefinedIns.class, - PushFalseIns.class, - PushTrueIns.class, - DupIns.class, - SwapIns.class, - AddIns.class, - AddIIns.class, - SubtractIns.class, - SubtractIIns.class, - ModuloIns.class, - MultiplyIns.class, - BitAndIns.class, - BitXorIns.class, - BitOrIns.class, - LShiftIns.class, - RShiftIns.class, - URShiftIns.class, - EqualsIns.class, - NotIns.class, - IfTypeIns.class, - JumpIns.class, - IncrementIns.class, - IncrementIIns.class, - DecrementIns.class, - DecrementIIns.class, - SetLocalTypeIns.class, - GetLocalTypeIns.class, - GreaterEqualsIns.class, - GreaterThanIns.class, - LessThanIns.class, - LessEqualsIns.class, - StrictEqualsIns.class, - IfTypeIns.class, - ReturnVoidIns.class, - ReturnValueIns.class, - NewFunctionIns.class, - PopIns.class, - PushScopeIns.class - }; - - InstructionDefinition def = action.definition; - - boolean ok = false; - for (Class s : allowedDefs) { - if (s.isAssignableFrom(def.getClass())) { - ok = true; - break; - } - } - if (!ok) { - System.err.println("Broken"); - break; - } - - - /*for (String variable : localData.variables.keySet()) { - System.out.println(Helper.byteArrToString(variable.getBytes())); - }*/ - idx++; - - if (action.definition instanceof JumpIns) { - - long address = action.offset + action.getBytes().length + action.operands[0]; - idx = code.adr2pos(address);//code.indexOf(code.getByAddress(address)); - if (idx == -1) { - throw new TranslateException("Jump target not found: " + address); - } - } - - if (action.definition instanceof IfTypeIns) { - if (EcmaScript.toBoolean(stack.pop().getResult())) { - long address = action.offset + action.getBytes().length + action.operands[0]; - idx = code.adr2pos(address); - if (idx == -1) { - throw new TranslateException("If target not found: " + address); - } - } - } - - if (/*localData.variables.size() == 1 && */stack.allItemsFixed()) { - result.idx = idx == code.code.size() ? idx - 1 : idx; - result.instructionsProcessed = instructionsProcessed; - result.variables.clear(); - for (int variableName : localData.localRegs.keySet()) { - Object value = localData.localRegs.get(variableName).getResult(); - result.variables.put(variableName, value); - } - result.stack.clear(); - result.stack.addAll(stack); - } - - if (action.definition instanceof ReturnValueIns) { - if (output.size() > 0) { - ReturnValueAVM2Item ret = (ReturnValueAVM2Item) output.get(output.size() - 1); - result.resultValue = ret.value.getResult(); - } - break; - } - - if (action.definition instanceof ReturnVoidIns) { - break; - } - } - } catch (EmptyStackException | TranslateException | InterruptedException ex) { - //ex.printStackTrace(); - } - } - - /*private Map getFakeFunctionResults(ActionList actions) { - - Map results = new HashMap<>(); - - for (int i = 0; i < actions.size(); i++) { - Action action = actions.get(i); - if (action instanceof ActionDefineFunction) { - ActionDefineFunction def = (ActionDefineFunction) action; - if (def.paramNames.isEmpty()) { - ExecutionResult result = new ExecutionResult(); - List lastActions = actions.getContainerLastActions(action); - int lastActionIdx = actions.indexOf(lastActions.get(0)); - executeActions(actions, i + 1, lastActionIdx, null, result, null); - if (result.resultValue != null) { - results.put(def.functionName, result.resultValue); - for (int j = i; j <= lastActionIdx; j++) { - actions.removeAction(i); - } - } - } - } - } - - return results; - } - - @Override - public byte[] proxyFileCatched(byte[] data) { - return null; - } - - @Override - public void swfParsed(SWF swf) { - } - - @Override - public void abcParsed(ABC abc, SWF swf) { - } - - @Override - public void methodBodyParsed(MethodBody body, SWF swf) { - }*/ - class ExecutionResult { - - public int idx = -1; - - public int instructionsProcessed = -1; - - //public ActionConstantPool constantPool; - public Map variables = new HashMap<>(); - - //public Set defines = new HashSet<>(); - public TranslateStack stack = new TranslateStack("?"); - - public ScopeStack scopeStack = new ScopeStack(); - - public Object resultValue; - } -} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2DeobfuscatorRegisters.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2DeobfuscatorRegisters.java new file mode 100644 index 000000000..bf6005041 --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2DeobfuscatorRegisters.java @@ -0,0 +1,250 @@ +/* + * Copyright (C) 2010-2015 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.abc.avm2; + +import com.jpexs.decompiler.flash.BaseLocalData; +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.abc.AVM2LocalData; +import com.jpexs.decompiler.flash.abc.avm2.graph.AVM2GraphSource; +import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.abc.avm2.instructions.DeobfuscatePopIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.IfTypeIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; +import com.jpexs.decompiler.flash.abc.avm2.instructions.jumps.JumpIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.GetLocalTypeIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.SetLocalTypeIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.other.ReturnValueIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.other.ReturnVoidIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.other.ThrowIns; +import com.jpexs.decompiler.flash.abc.avm2.model.NullAVM2Item; +import com.jpexs.decompiler.flash.abc.types.MethodBody; +import com.jpexs.decompiler.flash.abc.types.MethodInfo; +import com.jpexs.decompiler.flash.abc.types.traits.Trait; +import com.jpexs.decompiler.flash.action.ActionList; +import com.jpexs.decompiler.graph.Graph; +import com.jpexs.decompiler.graph.GraphPart; +import com.jpexs.decompiler.graph.GraphSource; +import com.jpexs.decompiler.graph.GraphSourceItem; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TranslateException; +import com.jpexs.decompiler.graph.TranslateStack; +import java.util.ArrayList; +import java.util.EmptyStackException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * + * AVM2 Deobfuscator removing single assigned local registers. + * + * Example: var a = true; var b = false; ... if(a){ ...ok }else{ not executed } + * + * @author JPEXS + */ +public class AVM2DeobfuscatorRegisters extends AVM2DeobfuscatorSimple { + + //private final int executionLimit = 30000; + @Override + public void actionListParsed(ActionList actions, SWF swf) { + + } + + @Override + public void deobfuscate(String path, int classIndex, boolean isStatic, int scriptIndex, ABC abc, AVM2ConstantPool cpool, Trait trait, MethodInfo minfo, MethodBody body) throws InterruptedException { + + body.getCode().markMappedOffsets(); + + removeUnreachableActions(body.getCode(), cpool, trait, minfo, body); + Map singleRegisters = getSingleUseRegisters(classIndex, isStatic, scriptIndex, abc, cpool, trait, minfo, body); + replaceSingleUseRegisters(singleRegisters, classIndex, isStatic, scriptIndex, abc, cpool, trait, minfo, body); + super.deobfuscate(path, classIndex, isStatic, scriptIndex, abc, cpool, trait, minfo, body); + removeUnreachableActions(body.getCode(), cpool, trait, minfo, body); + } + + private void replaceSingleUseRegisters(Map singleRegisters, int classIndex, boolean isStatic, int scriptIndex, ABC abc, AVM2ConstantPool cpool, Trait trait, MethodInfo minfo, MethodBody body) { + AVM2Code code = body.getCode(); + + for (int i = 0; i < code.code.size(); i++) { + AVM2Instruction ins = code.code.get(i); + if (ins.definition instanceof SetLocalTypeIns) { + SetLocalTypeIns slt = (SetLocalTypeIns) ins.definition; + int regId = slt.getRegisterId(ins); + if (singleRegisters.containsKey(regId)) { + code.replaceInstruction(i, new AVM2Instruction(ins.offset, new DeobfuscatePopIns(), new int[]{}), body); + } + } + if (ins.definition instanceof GetLocalTypeIns) { + GetLocalTypeIns glt = (GetLocalTypeIns) ins.definition; + int regId = glt.getRegisterId(ins); + if (singleRegisters.containsKey(regId)) { + code.replaceInstruction(i, makePush(singleRegisters.get(regId).getResult(), cpool), body); + } + } + } + } + + private Map getSingleUseRegisters(int classIndex, boolean isStatic, int scriptIndex, ABC abc, AVM2ConstantPool cpool, Trait trait, MethodInfo minfo, MethodBody body) { + AVM2Code code = body.getCode(); + Map ret = new HashMap<>(); + + if (code.code.isEmpty()) { + return ret; + } + + ExecutionResult res = new ExecutionResult(); + visitCode(new HashSet<>(), new TranslateStack("deo"), classIndex, isStatic, body, scriptIndex, abc, code, 0, code.code.size() - 1, res); + for (int reg : res.assignCount.keySet()) { + if (res.assignCount.get(reg) == 1) { + ret.put(reg, res.lastAssigned.get(reg)); + } + } + + return ret; + } + + private void visitCode(Set visited, TranslateStack stack, int classIndex, boolean isStatic, MethodBody body, int scriptIndex, ABC abc, AVM2Code code, int idx, int endIdx, ExecutionResult result) { + List output = new ArrayList<>(); + AVM2LocalData localData = newLocalData(scriptIndex, abc, abc.constants, body, isStatic, classIndex); + localData.localRegs.put(0, new NullAVM2Item(null));//this + int instructionsProcessed = 0; + + try { + while (true) { + if (idx > endIdx) { + break; + } + if (visited.contains(idx)) { + break; + } + visited.add(idx); + + AVM2Instruction action = code.code.get(idx); + instructionsProcessed++; + + + /*if (action.definition instanceof GetLocalTypeIns) { + int regId = ((GetLocalTypeIns) action.definition).getRegisterId(action);//stack.peek().getResult().toString(); + if (!localData.localRegs.containsKey(regId)) { + break; + } + }*/ + action.translate(localData, stack, output, Graph.SOP_USE_STATIC, ""); + InstructionDefinition def = action.definition; + + if (def instanceof SetLocalTypeIns) { + SetLocalTypeIns slt = (SetLocalTypeIns) def; + int regId = slt.getRegisterId(action); + if (!result.assignCount.containsKey(regId)) { + result.assignCount.put(regId, 0); + } + + result.assignCount.put(regId, result.assignCount.get(regId) + 1); + + GraphTargetItem regVal = localData.localRegs.get(regId); + if (regVal == null || !regVal.getNotCoerced().isCompileTime()) { + result.assignCount.put(regId, Integer.MAX_VALUE); + } else { + result.lastAssigned.put(regId, regVal.getNotCoerced()); + } + //assignCount + } + + idx++; + + if (action.definition instanceof JumpIns) { + + long address = action.offset + action.getBytes().length + action.operands[0]; + idx = code.adr2pos(address);//code.indexOf(code.getByAddress(address)); + if (idx == -1) { + throw new TranslateException("Jump target not found: " + address); + } + } + + if (action.isBranch()) { + List branches = action.getBranches(new GraphSource() { + + @Override + public int size() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public GraphSourceItem get(int pos) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public boolean isEmpty() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public List translatePart(GraphPart part, BaseLocalData localData, TranslateStack stack, int start, int end, int staticOperation, String path) throws InterruptedException { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public int adr2pos(long adr) { + return code.adr2pos(adr); + } + + @Override + public long pos2adr(int pos) { + return code.pos2adr(pos); + } + }); + idx = branches.get(0); + for (int n = 1; n < branches.size(); n++) { + visitCode(visited, (TranslateStack) stack.clone(), classIndex, isStatic, body, scriptIndex, abc, code, branches.get(n), endIdx, result); + } + } + /*if (action.definition instanceof IfTypeIns) { + long address = action.offset + action.getBytes().length + action.operands[0]; + int newIdx = code.adr2pos(address); + if (newIdx == -1) { + throw new TranslateException("If target not found: " + address); + } + visitCode(visited, (TranslateStack) stack.clone(), classIndex, isStatic, body, scriptIndex, abc, code, newIdx, endIdx, result); + }*/ + + if (action.definition instanceof ReturnValueIns) { + break; + } + + if (action.definition instanceof ThrowIns) { + break; + } + + if (action.definition instanceof ReturnVoidIns) { + break; + } + } + } catch (EmptyStackException | TranslateException | InterruptedException ex) { + ex.printStackTrace(); + } + } + + class ExecutionResult { + + public Map assignCount = new HashMap<>(); + public Map lastAssigned = new HashMap<>(); + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2DeobfuscatorSimple.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2DeobfuscatorSimple.java index 1e21be20b..bfeabfa67 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2DeobfuscatorSimple.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2DeobfuscatorSimple.java @@ -20,6 +20,7 @@ import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.abc.AVM2LocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.abc.avm2.instructions.DeobfuscatePopIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.IfTypeIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.AddIIns; @@ -38,6 +39,7 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.bitwise.URShiftIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.comparison.EqualsIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.jumps.JumpIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.DupIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PopIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushByteIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushDoubleIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushFalseIns; @@ -48,6 +50,7 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushStringIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushTrueIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushUndefinedIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.SwapIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.types.CoerceOrConvertTypeIns; import com.jpexs.decompiler.flash.abc.avm2.model.FloatValueAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.IntegerValueAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.NullAVM2Item; @@ -63,12 +66,15 @@ import com.jpexs.decompiler.flash.ecma.Undefined; import com.jpexs.decompiler.flash.helpers.SWFDecompilerListener; import com.jpexs.decompiler.graph.Graph; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.ScopeStack; import com.jpexs.decompiler.graph.TranslateException; import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.decompiler.graph.model.FalseItem; +import com.jpexs.decompiler.graph.model.PopItem; import com.jpexs.decompiler.graph.model.TrueItem; import java.util.ArrayList; import java.util.EmptyStackException; +import java.util.HashMap; import java.util.List; /** @@ -145,12 +151,10 @@ public class AVM2DeobfuscatorSimple implements SWFDecompilerListener { if (code.code.size() == 0) { return false; } - System.err.println("====================================================="); for (int i = 0; i < code.code.size(); i++) { ExecutionResult result = new ExecutionResult(); - System.err.println("Execute from " + i); - executeActions(code, i, code.code.size() - 1, result); + executeActions(classIndex, isStatic, body, scriptIndex, abc, code, i, code.code.size() - 1, result); if (result.idx != -1) { int newIstructionCount = 1; // jump @@ -158,44 +162,59 @@ public class AVM2DeobfuscatorSimple implements SWFDecompilerListener { newIstructionCount += result.stack.size(); } - if (newIstructionCount < result.instructionsProcessed) { + if (newIstructionCount < result.instructionsProcessed) //if (result.isIf) + { AVM2Instruction target = code.code.get(result.idx); AVM2Instruction prevAction = code.code.get(i); + int idelta = 0; if (result.stack.isEmpty() && prevAction.definition instanceof JumpIns) { - prevAction.operands[0] = ((int) (target.getOffset() - prevAction.getOffset() - prevAction.getBytes().length)); + prevAction.operands[0] = ((int) (target.offset - prevAction.offset - prevAction.getBytes().length)); } else { if (!result.stack.isEmpty()) { for (GraphTargetItem graphTargetItem : result.stack) { - AVM2Instruction ins = makePush(cpool, graphTargetItem); - if (ins != null) { - code.insertInstruction(i++, ins); + if (graphTargetItem instanceof PopItem) { + continue; + } + AVM2Instruction ins = makePush(graphTargetItem.getResult(), cpool); + if (ins != null) { + code.insertInstruction(i + (idelta++), ins); + //prevAction = ins; + } else { + throw new TranslateException("Cannot push: " + graphTargetItem); } - prevAction = ins; - //DirectValueActionItem dv = (DirectValueActionItem) graphTargetItem; - //push.values.add(dv.value); - } - //push.setAddress(prevAction.getAddress()); + } } AVM2Instruction jump = new AVM2Instruction(0, new JumpIns(), new int[]{0}); - jump.offset = prevAction.offset; - jump.operands[0] = ((int) (target.offset - jump.offset - jump.getBytes().length)); - code.insertInstruction(i++, jump); - } + code.insertInstruction(i + (idelta++), jump); - AVM2Instruction nextAction = code.code.size() > i ? code.code.get(i) : null; + jump.operands[0] = ((int) (target.offset - jump.offset - jump.getBytes().length)); + + } removeUnreachableActions(code, cpool, trait, minfo, body); removeZeroJumps(code, body); - if (nextAction != null) { - int nextIdx = code.code.indexOf(nextAction); - if (nextIdx < i) { - i = nextIdx; - } - } + i = -1; + /*if (nextAction != null) { + long mapped = nextAction.mappedOffset; + int nextIdx = -1; + for (int p = 0; p < code.code.size(); p++) { + if (code.code.get(p).mappedOffset == mapped) { + nextIdx = p; + break; + } + } + if (nextIdx == -1) { + //? + break; + } else { + i = nextIdx - 1; + } + + }*/ } } } @@ -220,9 +239,33 @@ public class AVM2DeobfuscatorSimple implements SWFDecompilerListener { return result; } - private void executeActions(AVM2Code code, int idx, int endIdx, ExecutionResult result) { - List output = new ArrayList<>(); + protected AVM2LocalData newLocalData(int scriptIndex, ABC abc, AVM2ConstantPool cpool, MethodBody body, boolean isStatic, int classIndex) { AVM2LocalData localData = new AVM2LocalData(); + localData.isStatic = isStatic; + localData.classIndex = classIndex; + localData.localRegs = new HashMap<>(); + localData.scopeStack = new ScopeStack(true); + localData.constants = cpool; + localData.methodInfo = abc.method_info; + localData.methodBody = body; + localData.abc = abc; + localData.localRegNames = new HashMap<>(); + localData.fullyQualifiedNames = new ArrayList<>(); + localData.parsedExceptions = new ArrayList<>(); + localData.finallyJumps = new HashMap<>(); + localData.ignoredSwitches = new HashMap<>(); + localData.ignoredSwitches2 = new ArrayList<>(); + localData.scriptIndex = scriptIndex; + localData.localRegAssignmentIps = new HashMap<>(); + localData.ip = 0; + localData.refs = new HashMap<>(); + localData.code = body.getCode(); + return localData; + } + + private void executeActions(int classIndex, boolean isStatic, MethodBody body, int scriptIndex, ABC abc, AVM2Code code, int idx, int endIdx, ExecutionResult result) { + List output = new ArrayList<>(); + AVM2LocalData localData = newLocalData(scriptIndex, abc, abc.constants, body, isStatic, classIndex); FixItemCounterTranslateStack stack = new FixItemCounterTranslateStack(""); int instructionsProcessed = 0; @@ -238,12 +281,7 @@ public class AVM2DeobfuscatorSimple implements SWFDecompilerListener { } AVM2Instruction action = code.code.get(idx); - - /*System.out.print(action.getASMSource(actions, new ArrayList(), ScriptExportMode.PCODE)); - for (int j = 0; j < stack.size(); j++) { - System.out.print(" '" + stack.get(j).getResult() + "'"); - } - System.out.println();*/ + action.translate(localData, stack, output, Graph.SOP_USE_STATIC, ""); InstructionDefinition def = action.definition; Class allowedDefs[] = new Class[]{ @@ -286,28 +324,34 @@ public class AVM2DeobfuscatorSimple implements SWFDecompilerListener { if (!ok) { break; } - action.translate(localData, stack, output, Graph.SOP_USE_STATIC, ""); - - idx++; + //boolean ifed = false; if (def instanceof JumpIns) { //ActionJump jump = (ActionJump) action; - long address = action.getOffset() + action.getBytes().length + action.operands[0]; + long address = action.offset + action.getBytes().length + action.operands[0]; idx = code.adr2pos(address); + if (idx == -1) { throw new TranslateException("Jump target not found: " + address); } - } - - if (def instanceof IfTypeIns) { + } else if (def instanceof IfTypeIns) { //ActionIf aif = (ActionIf) action; - if (EcmaScript.toBoolean(stack.pop().getResult())) { + GraphTargetItem top = stack.pop(); + Object res = top.getResult(); + if (EcmaScript.toBoolean(res)) { long address = action.offset + action.getBytes().length + action.operands[0]; idx = code.adr2pos(address);//code.indexOf(code.getByAddress(address)); if (idx == -1) { throw new TranslateException("If target not found: " + address); } + //ifed = true; + } else { + //action.definition = new DeobfuscatePopIns(); + code.replaceInstruction(idx, new AVM2Instruction(action.offset, new DeobfuscatePopIns(), new int[]{}), body); + idx++; } + } else { + idx++; } instructionsProcessed++; @@ -318,8 +362,12 @@ public class AVM2DeobfuscatorSimple implements SWFDecompilerListener { result.stack.clear(); result.stack.addAll(stack); } + } } catch (EmptyStackException | TranslateException | InterruptedException ex) { + //result.idx = -1; + //result.isIf = false; + //ignore } } @@ -341,7 +389,7 @@ public class AVM2DeobfuscatorSimple implements SWFDecompilerListener { } - public void deobfuscate(int classIndex, boolean isStatic, int scriptIndex, ABC abc, AVM2ConstantPool cpool, Trait trait, MethodInfo minfo, MethodBody body) throws InterruptedException { + public void deobfuscate(String path, int classIndex, boolean isStatic, int scriptIndex, ABC abc, AVM2ConstantPool cpool, Trait trait, MethodInfo minfo, MethodBody body) throws InterruptedException { removeUnreachableActions(body.getCode(), cpool, trait, minfo, body); removeObfuscationIfs(classIndex, isStatic, scriptIndex, abc, cpool, trait, minfo, body); removeZeroJumps(body.getCode(), body); @@ -355,6 +403,5 @@ public class AVM2DeobfuscatorSimple implements SWFDecompilerListener { public TranslateStack stack = new TranslateStack("?"); - public Object resultValue; } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/SetLocalTypeIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/SetLocalTypeIns.java index 57158d6a3..7fdc2075e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/SetLocalTypeIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/SetLocalTypeIns.java @@ -39,6 +39,7 @@ import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.NotCompileTimeItem; import com.jpexs.decompiler.graph.ScopeStack; import com.jpexs.decompiler.graph.TranslateStack; +import com.jpexs.decompiler.graph.model.PopItem; import java.util.HashMap; import java.util.List; import java.util.Stack; @@ -58,7 +59,9 @@ public abstract class SetLocalTypeIns extends InstructionDefinition implements S } else { localRegs.put(regId, value); }*/ - localRegs.put(regId, value); + if (!(value instanceof PopItem)) { + localRegs.put(regId, value); + } if (!regAssignCount.containsKey(regId)) { regAssignCount.put(regId, 0); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/LocalRegAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/LocalRegAVM2Item.java index 36b178587..9dc5ef03d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/LocalRegAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/LocalRegAVM2Item.java @@ -90,7 +90,7 @@ public class LocalRegAVM2Item extends AVM2Item { @Override public boolean isCompileTime(Set dependencies) { - return isCT; + return false; //isCT; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java index 1156095b9..e8f6ba74b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java @@ -27,7 +27,7 @@ import java.util.Stack; /** * This class is a scanner generated by * JFlex 1.6.0 - * from the specification file C:/Dropbox/Programovani/JavaSE/FFDec/libsrc/ffdec_lib/lexers/actionscript3_script.flex + * from the specification file D:/Dropbox/Programovani/JavaSE/FFDec/libsrc/ffdec_lib/lexers/actionscript3_script.flex */ public final class ActionScriptLexer { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodBody.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodBody.java index 303150337..1af07b3d3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodBody.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodBody.java @@ -20,7 +20,8 @@ import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.abc.ABCInputStream; import com.jpexs.decompiler.flash.abc.avm2.AVM2Code; import com.jpexs.decompiler.flash.abc.avm2.AVM2ConstantPool; -import com.jpexs.decompiler.flash.abc.avm2.AVM2Deobfuscator; +import com.jpexs.decompiler.flash.abc.avm2.AVM2DeobfuscatorRegisters; +import com.jpexs.decompiler.flash.abc.avm2.AVM2DeobfuscatorSimple; import com.jpexs.decompiler.flash.abc.avm2.CodeStats; import com.jpexs.decompiler.flash.abc.avm2.UnknownInstructionCode; import com.jpexs.decompiler.flash.abc.types.traits.Trait; @@ -202,6 +203,7 @@ public final class MethodBody implements Cloneable { if (exportMode != ScriptExportMode.AS) { getCode().toASMSource(constants, trait, method_info.get(this.method_info), this, exportMode, writer); } else { + //if (!path.contains("@")) { if (!Configuration.decompile.get()) { writer.appendNoHilight(Helper.getDecompilationSkippedComment()).newLine(); return; @@ -245,6 +247,7 @@ public final class MethodBody implements Cloneable { if (exportMode != ScriptExportMode.AS) { getCode().toASMSource(constants, trait, method_info.get(this.method_info), this, exportMode, writer); } else { + //if (!path.contains("@")) { if (!Configuration.decompile.get()) { //writer.startMethod(this.method_info); writer.appendNoHilight(Helper.getDecompilationSkippedComment()).newLine(); @@ -276,12 +279,19 @@ public final class MethodBody implements Cloneable { public MethodBody convertMethodBody(String path, boolean isStatic, int scriptIndex, int classIndex, ABC abc, Trait trait, AVM2ConstantPool constants, List method_info, ScopeStack scopeStack, boolean isStaticInitializer, List fullyQualifiedNames, Traits initTraits) throws InterruptedException { MethodBody b = clone(); - AVM2Code deobfuscated = b.getCode(); - deobfuscated.markMappedOffsets(); - //deobfuscated.inlineJumpExit(); + b.getCode().markMappedOffsets(); + if (Configuration.autoDeobfuscate.get()) { - AVM2Deobfuscator deo = new AVM2Deobfuscator(); - deo.deobfuscate(classIndex, isStatic, scriptIndex, abc, constants, trait, method_info.get(this.method_info), b); + if (Configuration.deobfuscationMode.get() == 0) { + try { + b.getCode().removeTraps(constants, trait, method_info.get(this.method_info), b, abc, scriptIndex, classIndex, isStatic, path); + } catch (Throwable ex) { + logger.log(Level.SEVERE, "Error during old deobfuscation: " + path, ex); + } + } else { + new AVM2DeobfuscatorSimple().deobfuscate(path, classIndex, isStatic, scriptIndex, abc, constants, trait, method_info.get(this.method_info), b); + new AVM2DeobfuscatorRegisters().deobfuscate(path, classIndex, isStatic, scriptIndex, abc, constants, trait, method_info.get(this.method_info), b); + } } return b; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/ScopeStack.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/ScopeStack.java index bb5478932..59f630cfd 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/ScopeStack.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/ScopeStack.java @@ -16,15 +16,17 @@ */ package com.jpexs.decompiler.graph; -import java.util.Stack; - /** * * @author JPEXS */ public class ScopeStack extends TranslateStack { + public ScopeStack(boolean allowEmpty) { + super(allowEmpty ? "scope" : null); + } + public ScopeStack() { - super("scope"); + this(true); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/FalseItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/FalseItem.java index f9704f06f..58691a0b8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/FalseItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/FalseItem.java @@ -65,4 +65,14 @@ public class FalseItem extends GraphTargetItem implements LogicalOpItem, SimpleV return true; } + @Override + public boolean isCompileTime() { + return true; + } + + @Override + public Object getResult() { + return Boolean.FALSE; + } + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/TrueItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/TrueItem.java index 99069a463..2421816a6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/TrueItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/TrueItem.java @@ -65,4 +65,15 @@ public class TrueItem extends GraphTargetItem implements LogicalOpItem, SimpleVa public boolean isSimpleValue() { return true; } + + @Override + public boolean isCompileTime() { + return true; + } + + @Override + public Object getResult() { + return Boolean.TRUE; + } + } diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3DeobfuscatorTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3DeobfuscatorTest.java new file mode 100644 index 000000000..ff5e33f9a --- /dev/null +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3DeobfuscatorTest.java @@ -0,0 +1,262 @@ +/* + * Copyright (C) 2010-2015 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash; + +import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.abc.avm2.AVM2ConstantPool; +import com.jpexs.decompiler.flash.abc.avm2.parser.AVM2ParseException; +import com.jpexs.decompiler.flash.abc.avm2.parser.script.ActionScriptParser; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; +import com.jpexs.decompiler.flash.helpers.CodeFormatting; +import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter; +import com.jpexs.decompiler.flash.tags.ABCContainerTag; +import com.jpexs.decompiler.graph.CompilationException; +import java.io.BufferedInputStream; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.concurrent.TimeoutException; +import static org.testng.Assert.fail; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + +/** + * + * @author JPEXS + */ +public class ActionScript3DeobfuscatorTest extends ActionStript2TestBase { + + @BeforeClass + public void init() throws IOException, InterruptedException { + //Main.initLogging(false); + Configuration.autoDeobfuscate.set(true); + Configuration.deobfuscationMode.set(1); + swf = new SWF(new BufferedInputStream(new FileInputStream("testdata/as3/as3.swf")), false); + } + + private String recompile(String str) throws AVM2ParseException, IOException, CompilationException, InterruptedException { + str = "package { public class Test { public static function trace(s){ } public static function test(){ " + str + " } } }"; + final ABC abc = new ABC(new ABCContainerTag() { + + @Override + public ABC getABC() { + return null; + } + + @Override + public SWF getSwf() { + return swf; + } + + @Override + public int compareTo(ABCContainerTag o) { + return 0; + } + }); + ActionScriptParser par = new ActionScriptParser(abc, new ArrayList<>()); + HighlightedTextWriter writer = new HighlightedTextWriter(new CodeFormatting(), false); + par.addScript(str, true, "Test.as", 0); + + abc.script_info.get(0).getPacks(abc, 0, "", new ArrayList<>()).get(0).toSource(writer, abc.script_info.get(0).traits.traits, ScriptExportMode.AS, false); + return writer.toString(); + } + + @DataProvider(name = "provideBasicTrueExpressions") + public Object[][] provideBasicTrueExpressions() { + return new Object[][]{ + {"1!=5"}, {"5==5"}, {"1<4"}, {"5>4"}, {"5*6==30"} + }; + } + + @DataProvider(name = "provideBasicFalseExpressions") + public Object[][] provideBasicFalseExpressions() { + return new Object[][]{ + {"1==5"}, {"5!=5"}, {"1>4"}, {"5<4"}, {"5*7==12"} + }; + } + + @Test(dataProvider = "provideBasicTrueExpressions") + public void testRemoveBasicTrueExpressions(String expression) throws IOException, CompilationException, InterruptedException, TimeoutException, AVM2ParseException { + String res = recompile("if(" + expression + "){" + + "trace(\"OK\");" + + "} else {" + + "trace(\"FAIL\");" + + "}"); + if (res.contains("\"FAIL\"")) { + fail("OnFalse clause was not removed: " + res); + } + if (!res.contains("\"OK\"")) { + fail("OnTrue clause was removed: " + res); + } + } + + @Test(dataProvider = "provideBasicFalseExpressions") + public void testRemoveBasicFalseExpressions(String expression) throws Exception { + String res = recompile("if(" + expression + "){" + + "trace(\"FAIL\");" + + "} else {" + + "trace(\"OK\");" + + "}"); + if (res.contains("\"FAIL\"")) { + fail("OnTrue clause was not removed:" + res); + } + if (!res.contains("\"OK\"")) { + fail("OnFalse clause was removed:" + res); + } + } + + @Test + public void testRemoveKnownVariables() throws Exception { + String res = recompile("var a = true; var b = false;" + + "if(a){" + + "trace(\"OK1\");" + + "}else{" + + "trace(\"FAIL1\");" + + "}" + + "if(b){" + + "trace(\"FAIL2\");" + + "}else{" + + "trace(\"OK2\");" + + "}"); + if (!res.contains("\"OK1\"")) { + fail("if true OnTrue removed"); + } + if (!res.contains("\"OK2\"")) { + fail("if false OnFalse removed" + res); + } + if (res.contains("\"FAIL1\"")) { + fail("if true OnFalse not removed"); + } + if (res.contains("\"FAIL2\"")) { + fail("if false OnTrue not removed"); + } + if (res.contains("var ")) { + fail("variables for obsucation not removed"); + } + if (res.contains("if")) { + fail("if clauses not removed"); + } + } + + @Test + public void testRemoveKnownVariables2() throws Exception { + String res = recompile("var a = true; var b = false;" + + "if(a){" + + "trace(\"OK1\");" + + "}else{" + + "trace(\"OK2\");" + + "}" + + "a = 59;" + + "if(b){" + + "trace(\"FAIL1\");" + + "}else{" + + "trace(\"OK3\");" + + "}"); + if (!res.contains("\"OK1\"")) { + fail("!OK1:" + res); + } + if (!res.contains("\"OK2\"")) { + fail("!OK2"); + } + if (!res.contains("\"OK3\"")) { + fail("!OK3"); + } + if (res.contains("\"FAIL1\"")) { + fail("FAIL1"); + } + } + + // TODO: JPEXS @Test + public void testNotRemoveParams() throws Exception { + String res = recompile("function tst(p1,p2){" + + "var a = 2;" + + "var b = 3 * a;" + + "if(b>1){" + + "trace(\"OK1\");" + + "}else{" + + "trace(\"FAIL1\");" + + "}" + + "var c = p1*5;" + + "if(c){" + + "trace(\"OK2\");" + + "}else{" + + "trace(\"OK3\");" + + "}" + + "}"); + if (!res.contains("\"OK1\"")) { + fail("basic if true onTrue removed"); + } + if (res.contains("\"FAIL1\"")) { + fail("basic if true onFalse not removed"); + } + if (!res.contains("\"OK2\"")) { + fail("if parameter onTrue removed"); + } + if (!res.contains("\"OK3\"")) { + fail("if parameter onFalse removed"); + } + } + + //TODO: JPEXS @Test + public void testEvailExpressionAfterWhile() throws Exception { + String res = recompile("var a = 5;" + + "while(true){" + + "if(a==73){" + + "a = 15;" + + "}" + + "if(a==1){" + + "trace(\"FAIL1\");" + + "}" + + "if(a==5){" + + "a=50;" + + "}" + + "if(a == 201){" + + "break;" + + "}" + + "a++;" + + "if(a == 53){" + + "a = a + 20;" + + "}" + + "if(a>500){" + + "trace(\"FAIL2\");" + + "}" + + "if(a==16){" + + "a = 200;" + + "}" + + "}" + + "" + + "if(a == 201){" + + "trace(\"OK\");" + + "}else{" + + "trace(\"FAIL3\");" + + "}"); + if (res.contains("\"FAIL1\"")) { + fail("unreachable if onTrue not removed"); + } + if (res.contains("\"FAIL2\"")) { + fail("unreachable if onTrue 2 not removed"); + } + if (res.contains("\"FAIL3\"")) { + fail("unreachable if onTrue 3 not removed"); + } + if (!res.contains("\"OK\"")) { + fail("reachable of onTrue removed"); + } + } +} diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties index b37c480b4..c4de988e2 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties @@ -497,7 +497,7 @@ contextmenu.parseABC = Parse ABC contextmenu.parseInstructions = Parse AVM2 Instructions #after version 2.1.3 -menu.deobfuscation = AS1/2 Deobfuscation +menu.deobfuscation = Deobfuscation menu.file.deobfuscation.old = Old style menu.file.deobfuscation.new = New style diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_ca.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_ca.properties index 86879963b..83d1aef65 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_ca.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_ca.properties @@ -497,7 +497,7 @@ contextmenu.parseABC = Analitza ABC contextmenu.parseInstructions = Analitza les instruccions AVM2 #after version 2.1.3 -menu.deobfuscation = Desofuscaci\u00f3 AS1/2 +menu.deobfuscation = Desofuscaci\u00f3 menu.file.deobfuscation.old = Estil vell menu.file.deobfuscation.new = Estil nou diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_cs.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_cs.properties index c38a772fc..5c86b17fd 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_cs.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_cs.properties @@ -496,7 +496,7 @@ contextmenu.parseActions = Naparsovat akce contextmenu.parseABC = Naparsovat ABC contextmenu.parseInstructions = Naparsovat AVM2 instrukce -menu.deobfuscation = AS1/2 Deobfuskace +menu.deobfuscation = Deobfuskace menu.file.deobfuscation.old = Star\u00fd zp\u016fsob menu.file.deobfuscation.new = Nov\u00fd zp\u016fsob diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_es.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_es.properties index 7017ceaab..344a0c9fe 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_es.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_es.properties @@ -497,7 +497,7 @@ contextmenu.parseABC = Analizar ABC contextmenu.parseInstructions = Analizar instrucciones AVM2 #after version 2.1.3 -menu.deobfuscation = Desofuscaci\u00f3n AS1/2 +menu.deobfuscation = Desofuscaci\u00f3n menu.file.deobfuscation.old = Estilo viejo menu.file.deobfuscation.new = Estilo nuevo diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_fr.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_fr.properties index b33b1be20..710801368 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_fr.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_fr.properties @@ -497,7 +497,7 @@ contextmenu.parseABC = Analyser ABC contextmenu.parseInstructions = Analyser les instructions AVM2 #after version 2.1.3 -menu.deobfuscation = AS1/2 D\u00e9sobfuscation +menu.deobfuscation = D\u00e9sobfuscation menu.file.deobfuscation.old = Ancien style menu.file.deobfuscation.new = Nouveau style diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_hu.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_hu.properties index 6048ba5d5..f7ca6666f 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_hu.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_hu.properties @@ -497,7 +497,7 @@ contextmenu.parseABC = ABC elemz\u00e9se contextmenu.parseInstructions = AVM2 utas\u00edt\u00e1sok elemz\u00e9se #after version 2.1.3 -menu.deobfuscation = AS1/2 Deobfuszk\u00e1l\u00e1s +menu.deobfuscation = Deobfuszk\u00e1l\u00e1s menu.file.deobfuscation.old = R\u00e9gi menu.file.deobfuscation.new = \u00daj diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_pl.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_pl.properties index 63ec9aa4e..81bf6231c 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_pl.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_pl.properties @@ -495,7 +495,7 @@ contextmenu.parseActions = Analizuj akcje contextmenu.parseABC = Analizuj ABC contextmenu.parseInstructions = Analizuj instrukcje AVM2 -menu.deobfuscation = Odkodowanie AS1/2 +menu.deobfuscation = Odkodowanie menu.file.deobfuscation.old = Stary styl menu.file.deobfuscation.new = Nowy styl diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_ru.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_ru.properties index 1dc7de3dd..0bbcef832 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_ru.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_ru.properties @@ -1,578 +1,578 @@ -# Copyright (C) 2010-2015 JPEXS -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -menu.file = \u0424\u0430\u0439\u043b -menu.file.open = \u041e\u0442\u043a\u0440\u044b\u0442\u044c... -menu.file.save = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c -menu.file.saveas = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u043a... -menu.file.export.fla = \u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 FLA -menu.file.export.all = \u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0451 -menu.file.export.selection = \u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0435 -menu.file.exit = \u0412\u044b\u0439\u0442\u0438 - -menu.tools = \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b -menu.tools.searchas = \u041f\u043e\u0438\u0441\u043a \u043f\u043e \u0432\u0441\u0435\u043c\u0443 ActionScript... -menu.tools.proxy = \u041f\u0440\u043e\u043a\u0441\u0438 -menu.tools.deobfuscation = \u0414\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f -menu.tools.deobfuscation.pcode = \u0414\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f P-code... -menu.tools.deobfuscation.globalrename = \u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 -menu.tools.deobfuscation.renameinvalid = \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b -menu.tools.gotoDocumentClass = \u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u0443 - -menu.settings = \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 -menu.settings.autodeobfuscation = \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f -menu.settings.internalflashviewer = \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044c Flash -menu.settings.parallelspeedup = \u041c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c (\u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b) -menu.settings.disabledecompilation = \u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c) -menu.settings.addtocontextmenu = \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c FFDec \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0435 \u043c\u0435\u043d\u044e SWF \u0444\u0430\u0439\u043b\u043e\u0432 -menu.settings.language = \u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u044f\u0437\u044b\u043a -menu.settings.cacheOnDisk = \u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0434\u0438\u0441\u043a -menu.settings.gotoMainClassOnStartup = \u0412\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 - -menu.help = \u041f\u043e\u043c\u043e\u0449\u044c -menu.help.checkupdates = \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f... -menu.help.helpus = \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0442\u0435 \u043d\u0430\u0441! -menu.help.homepage = \u0414\u043e\u043c\u0430\u0448\u043d\u044f\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 -menu.help.about = \u041e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435... - -contextmenu.remove = \u0423\u0434\u0430\u043b\u0438\u0442\u044c - -button.save = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c -button.edit = \u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c -button.cancel = \u041e\u0442\u043c\u0435\u043d\u0430 -button.replace = \u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c... - -notavailonthisplatform = \u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f Windows). - -swfpreview = \u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 SWF -swfpreview.internal = \u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 SWF (\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044c) - -parameters = \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b - -rename.enternew = \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043d\u043e\u0432\u043e\u0435 \u0438\u043c\u044f: - -rename.finished.identifier = \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d. -rename.finished.multiname = %count% multiname \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043e. - -node.texts = \u0442\u0435\u043a\u0441\u0442\u044b -node.images = \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f -node.movies = \u0432\u0438\u0434\u0435\u043e -node.sounds = \u0437\u0432\u0443\u043a\u0438 -node.binaryData = \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 -node.fonts = \u0448\u0440\u0438\u0444\u0442\u044b -node.sprites = \u0441\u043f\u0440\u0430\u0439\u0442\u044b -node.shapes = \u0444\u043e\u0440\u043c\u044b -node.morphshapes = morphshapes -node.buttons = \u043a\u043d\u043e\u043f\u043a\u0438 -node.frames = \u043a\u0430\u0434\u0440\u044b -node.scripts = \u0441\u043a\u0440\u0438\u043f\u0442\u044b - -message.warning = \u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435 -message.confirm.experimental = \u041f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0432\u0440\u0435\u0434\u0438\u0442\u044c SWF \u0444\u0430\u0439\u043b \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0435\u0440\u0430\u0431\u043e\u0447\u0438\u043c.\r\n\u0418\u0421\u041f\u041e\u041b\u042c\u0417\u0423\u0419\u0422\u0415 \u041d\u0410 \u0421\u0412\u041e\u0419 \u0421\u0422\u0420\u0410\u0425 \u0418 \u0420\u0418\u0421\u041a! \u0412\u044b \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c? -message.confirm.parallel = \u041c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0438 \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e, \u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u043c\u044f\u0442\u0438. -message.confirm.on = \u0412\u041a\u041b\u044e\u0447\u0438\u0442\u044c? -message.confirm.off = \u0412\u042b\u041a\u041b\u044e\u0447\u0438\u0442\u044c? -message.confirm = \u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c - -message.confirm.autodeobfuscate = \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434.\r\n\u0414\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0435\u0442 \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e \u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \"\u043c\u0451\u0440\u0442\u0432\u043e\u0433\u043e\" \u043a\u043e\u0434\u0430.\r\n\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044e \u043b\u0443\u0447\u0448\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u043a\u043e\u0434 \u043d\u0435 \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d. - -message.parallel = \u041c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c -message.trait.saved = Trait \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d - -message.constant.new.string = \u0421\u0442\u0440\u043e\u043a\u0430 (String) "%value%" \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442. \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c? -message.constant.new.string.title = \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 (String) -message.constant.new.integer = \u0426\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e (Integer) "%value%" \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442. \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c? -message.constant.new.integer.title = \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e (Integer) -message.constant.new.unsignedinteger = \u0411\u0435\u0437\u0437\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e (Unsigned integer) "%value%" \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442. \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c? -message.constant.new.unsignedinteger.title = \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0431\u0435\u0437\u0437\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e (Unsigned integer) -message.constant.new.double = \u0414\u0440\u043e\u0431\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e (Double) "%value%" \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442. \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c? -message.constant.new.double.title = \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e (Double) - -work.buffering = \u0411\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f -work.waitingfordissasembly = \u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f -work.gettinghilights = \u041f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 -work.disassembling = \u0414\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 -work.exporting = \u042d\u043a\u0441\u043f\u043e\u0440\u0442 -work.searching = \u041f\u043e\u0438\u0441\u043a -work.renaming = \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 -work.exporting.fla = \u042d\u043a\u0441\u043f\u043e\u0440\u0442 FLA -work.renaming.identifiers = \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 -work.deobfuscating = \u0414\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f -work.decompiling = \u0414\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f -work.gettingvariables = \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 -work.reading.swf = \u0427\u0442\u0435\u043d\u0438\u0435 SWF -work.creatingwindow = \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u043a\u043d\u0430 -work.buildingscripttree = \u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0434\u0435\u0440\u0435\u0432\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 - -work.deobfuscating.complete = \u0414\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430 - -message.search.notfound = \u0422\u0435\u043a\u0441\u0442 "%searchtext%" \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d. -message.search.notfound.title = \u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e - -message.rename.notfound.multiname = \u041f\u043e\u0434 \u043a\u0443\u0440\u0441\u043e\u0440\u043e\u043c \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c multiname -message.rename.notfound.identifier = \u041f\u043e\u0434 \u043a\u0443\u0440\u0441\u043e\u0440\u043e\u043c \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 -message.rename.notfound.title = \u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e -message.rename.renamed = \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043e: %count% - -filter.images = \u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f (*.jpg,*.gif,*.png,*.bmp) -filter.fla = \u041f\u0440\u043e\u0435\u043a\u0442 %version% (*.fla) -filter.xfl = \u041d\u0435\u0441\u0436\u0430\u0442\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 %version% (*.xfl) -filter.swf = SWF \u0444\u0430\u0439\u043b\u044b (*.swf) - -error = \u041e\u0448\u0438\u0431\u043a\u0430 -error.image.invalid = \u041d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435. - -error.text.invalid = \u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442: %text% \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 %line% -error.file.save = \u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0444\u0430\u0439\u043b -error.file.write = \u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0444\u0430\u0439\u043b -error.export = \u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 - -export.select.directory = \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0430\u043f\u043a\u0443 \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 -export.finishedin = \u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0437\u0430 %time% - -update.check.title = \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 -update.check.nonewversion = \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u043d\u0435\u0442. - -message.helpus = \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\r\n%url%\r\n\u0434\u043b\u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439. -message.homepage = \u041f\u043e\u0441\u0435\u0442\u0438\u0442\u0435 \u0434\u043e\u043c\u0430\u0448\u043d\u044e\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443: \r\n%url% - -proxy = \u041f\u0440\u043e\u043a\u0441\u0438 -proxy.start = \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u043a\u0441\u0438 -proxy.stop = \u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u043a\u0441\u0438 -proxy.show = \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e\u043a\u0441\u0438 -exit = \u0412\u044b\u0439\u0442\u0438 - -panel.disassembled = P-\u043a\u043e\u0434 -panel.decompiled = ActionScript - -search.info = \u041f\u043e\u0438\u0441\u043a "%text%": -search.script = \u0421\u043a\u0440\u0438\u043f\u0442 - -constants = Constants -traits = Traits - -pleasewait = \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435 - -abc.detail.methodtrait = Method/Getter/Setter Trait -abc.detail.unsupported = - -abc.detail.slotconsttrait = Slot/Const Trait -abc.detail.traitname = \u0418\u043c\u044f: - -abc.detail.body.params.maxstack = \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0435\u043a\u0430: -abc.detail.body.params.localregcount = \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432: -abc.detail.body.params.minscope = \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438: -abc.detail.body.params.maxscope = \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438: -abc.detail.body.params.autofill = \u0410\u0432\u0442\u043e\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u043a\u043e\u0434\u0430 (\u0413\u041b\u041e\u0411\u0410\u041b\u042c\u041d\u0410\u042f \u041d\u0410\u0421\u0422\u0420\u041e\u0419\u041a\u0410) -abc.detail.body.params.autofill.experimental = ...\u042d\u041a\u0421\u041f\u0415\u0420\u0418\u041c\u0415\u041d\u0422\u0410\u041b\u042c\u041d\u041e - -abc.detail.methodinfo.methodindex = \u0418\u043d\u0434\u0435\u043a\u0441 \u043c\u0435\u0442\u043e\u0434\u0430: -abc.detail.methodinfo.parameters = \u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b: -abc.detail.methodinfo.returnvalue = \u0422\u0438\u043f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f: - -error.methodinfo.params = \u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u0445 MethodInfo -error.methodinfo.returnvalue = \u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0442\u0438\u043f\u0435 \u0432\u043e\u0437\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f MethodInfo - -abc.detail.methodinfo = MethodInfo -abc.detail.body.code = \u041a\u043e\u0434 MethodBody -abc.detail.body.params = \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b MethodBody - -abc.detail.slotconst.typevalue = \u0422\u0438\u043f \u0438 \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435: - -error.slotconst.typevalue = \u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0442\u0438\u043f\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f SlotConst - -message.autofill.failed = \u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.\r\n\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0430\u0432\u0442\u043e\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. -info.selecttrait = \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u043b\u0430\u0441\u0441 \u0438 \u043a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u043d\u0430 trait \u0432 ActionScript \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. - -button.viewgraph = \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0413\u0440\u0430\u0444\u0430 -button.viewhex = \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 Hex - -abc.traitslist.instanceinitializer = \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 -abc.traitslist.classinitializer = \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 - -action.edit.experimental = (\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e) - -message.action.saved = \u041a\u043e\u0434 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d - -error.action.save = %error% \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 %line% - -message.confirm.remove = \u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 %item%\n \u0438 \u0432\u0441\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0437\u0430\u0432\u0438\u0441\u044f\u0449\u0438\u0435 \u043e\u0442 \u043d\u0435\u0433\u043e? - -#after version 1.6.5u1: - -button.ok = OK -button.cancel = \u041e\u0442\u043c\u0435\u043d\u0430 - -font.name = \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0448\u0440\u0438\u0444\u0442\u0430: -font.isbold = \u0416\u0438\u0440\u043d\u044b\u0439: -font.isitalic = \u041a\u0443\u0440\u0441\u0438\u0432: -font.ascent = \u0412\u0435\u0440\u0445\u043d\u0438\u0439 \u0432\u044b\u043d\u043e\u0441: -font.descent = \u041d\u0438\u0436\u043d\u0438\u0439 \u0432\u044b\u043d\u043e\u0441: -font.leading = \u0418\u043d\u0442\u0435\u0440\u043b\u0438\u043d\u044c\u044f\u0436: -font.characters = \u0421\u0438\u043c\u0432\u043e\u043b\u044b: -font.characters.add = \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u044b: -value.unknown = ? - -yes = \u0434\u0430 -no = \u043d\u0435\u0442 - -errors.present = \u0412 \u043b\u043e\u0433\u0435 \u0435\u0441\u0442\u044c \u041e\u0428\u0418\u0411\u041a\u0418. \u041a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430. -errors.none = \u0412 \u043b\u043e\u0433\u0435 \u043d\u0435\u0442 \u043e\u0448\u0438\u0431\u043e\u043a. - -#after version 1.6.6: - -dialog.message.title = \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 -dialog.select.title = \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 - -button.yes = \u0414\u0430 -button.no = \u041d\u0435\u0442 - -FileChooser.openButtonText = \u041e\u0442\u043a\u0440\u044b\u0442\u044c -FileChooser.openButtonToolTipText = \u041e\u0442\u043a\u0440\u044b\u0442\u044c -FileChooser.lookInLabelText = \u0418\u0441\u043a\u0430\u0442\u044c \u0432: -FileChooser.acceptAllFileFilterText = \u0412\u0441\u0435 \u0444\u0430\u0439\u043b\u044b -FileChooser.filesOfTypeLabelText = \u0422\u0438\u043f \u0444\u0430\u0439\u043b\u043e\u0432: -FileChooser.fileNameLabelText = \u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430: -FileChooser.listViewButtonToolTipText = \u0421\u043f\u0438\u0441\u043e\u043a -FileChooser.listViewButtonAccessibleName = \u0421\u043f\u0438\u0441\u043e\u043a -FileChooser.detailsViewButtonToolTipText = \u0422\u0430\u0431\u043b\u0438\u0446\u0430 -FileChooser.detailsViewButtonAccessibleName = \u0422\u0430\u0431\u043b\u0438\u0446\u0430 -FileChooser.upFolderToolTipText = \u0412\u0432\u0435\u0440\u0445 -FileChooser.upFolderAccessibleName = \u0412\u0432\u0435\u0440\u0445 -FileChooser.homeFolderToolTipText = \u0414\u043e\u043c\u043e\u0439 -FileChooser.homeFolderAccessibleName = \u0414\u043e\u043c\u043e\u0439 -FileChooser.fileNameHeaderText = \u0418\u043c\u044f -FileChooser.fileSizeHeaderText = \u0420\u0430\u0437\u043c\u0435\u0440 -FileChooser.fileTypeHeaderText = \u0422\u0438\u043f -FileChooser.fileDateHeaderText = \u0414\u0430\u0442\u0430 -FileChooser.fileAttrHeaderText = \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b -FileChooser.openDialogTitleText = \u041e\u0442\u043a\u0440\u044b\u0442\u044c -FileChooser.directoryDescriptionText = \u041f\u0430\u043f\u043a\u0430 -FileChooser.directoryOpenButtonText = \u041e\u0442\u043a\u0440\u044b\u0442\u044c -FileChooser.directoryOpenButtonToolTipText = \u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443 -FileChooser.fileDescriptionText = \u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b -FileChooser.helpButtonText = \u041f\u043e\u043c\u043e\u0449\u044c -FileChooser.helpButtonToolTipText = \u041f\u043e\u043c\u043e\u0449\u044c \u043f\u043e \u0434\u0438\u0430\u043b\u043e\u0433\u0443 \u0432\u044b\u0431\u043e\u0440\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 -FileChooser.newFolderAccessibleName = \u041d\u043e\u0432\u0430\u044f \u043f\u0430\u043f\u043a\u0430 -FileChooser.newFolderErrorText = \u041e\u0448\u0438\u0431\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u043f\u0430\u043f\u043a\u0438 -FileChooser.newFolderToolTipText = \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443 -FileChooser.other.newFolder = \u041d\u043e\u0432\u0430\u044f\u041f\u0430\u043f\u043a\u0430 -FileChooser.other.newFolder.subsequent = \u041d\u043e\u0432\u0430\u044f\u041f\u0430\u043f\u043a\u0430.{0} -FileChooser.win32.newFolder = \u041d\u043e\u0432\u0430\u044f \u043f\u0430\u043f\u043a\u0430 -FileChooser.win32.newFolder.subsequent = \u041d\u043e\u0432\u0430\u044f \u043f\u0430\u043f\u043a\u0430 ({0}) -FileChooser.saveButtonText = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c -FileChooser.saveButtonToolTipText = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b -FileChooser.saveDialogTitleText = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c -FileChooser.saveInLabelText = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432: -FileChooser.updateButtonText = \u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c -FileChooser.updateButtonToolTipText = \u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u0430\u043f\u043a\u0438 - -#after version 1.6.6u2: - -FileChooser.detailsViewActionLabel.textAndMnemonic = \u0422\u0430\u0431\u043b\u0438\u0446\u0430 -FileChooser.detailsViewButtonToolTip.textAndMnemonic = \u0422\u0430\u0431\u043b\u0438\u0446\u0430 -FileChooser.fileAttrHeader.textAndMnemonic = \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b -FileChooser.fileDateHeader.textAndMnemonic = \u0418\u0437\u043c\u0435\u043d\u0435\u043d -FileChooser.fileNameHeader.textAndMnemonic = \u0418\u043c\u044f -FileChooser.fileNameLabel.textAndMnemonic = \u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430: -FileChooser.fileSizeHeader.textAndMnemonic = \u0420\u0430\u0437\u043c\u0435\u0440 -FileChooser.fileTypeHeader.textAndMnemonic = \u0422\u0438\u043f -FileChooser.filesOfTypeLabel.textAndMnemonic = \u0424\u0430\u0439\u043b\u044b \u0442\u0438\u043f\u0430: -FileChooser.folderNameLabel.textAndMnemonic = \u0418\u043c\u044f \u043f\u0430\u043f\u043a\u0438: -FileChooser.homeFolderToolTip.textAndMnemonic = \u0414\u043e\u043c\u043e\u0439 -FileChooser.listViewActionLabel.textAndMnemonic = \u0421\u043f\u0438\u0441\u043e\u043a -FileChooser.listViewButtonToolTip.textAndMnemonic = \u0421\u043f\u0438\u0441\u043e\u043a -FileChooser.lookInLabel.textAndMnemonic = \u0418\u0441\u043a\u0430\u0442\u044c \u0432: -FileChooser.newFolderActionLabel.textAndMnemonic = \u041d\u043e\u0432\u0430\u044f \u043f\u0430\u043f\u043a\u0430 -FileChooser.newFolderToolTip.textAndMnemonic = \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443 -FileChooser.refreshActionLabel.textAndMnemonic = \u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c -FileChooser.saveInLabel.textAndMnemonic = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432: -FileChooser.upFolderToolTip.textAndMnemonic = \u0412\u0432\u0435\u0440\u0445 -FileChooser.viewMenuButtonAccessibleName = \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u041c\u0435\u043d\u044e -FileChooser.viewMenuButtonToolTipText = \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u041c\u0435\u043d\u044e -FileChooser.viewMenuLabel.textAndMnemonic = \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 -FileChooser.newFolderActionLabelText = \u041d\u043e\u0432\u0430\u044f \u043f\u0430\u043f\u043a\u0430 -FileChooser.listViewActionLabelText = \u0421\u043f\u0438\u0441\u043e\u043a -FileChooser.detailsViewActionLabelText = \u0422\u0430\u0431\u043b\u0438\u0446\u0430 -FileChooser.refreshActionLabelText = \u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c -FileChooser.sortMenuLabelText = \u0423\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u043a\u0438 -FileChooser.viewMenuLabelText = \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 -FileChooser.fileSizeKiloBytes = {0} \u041a\u0411 -FileChooser.fileSizeMegaBytes = {0} \u041c\u0411 -FileChooser.fileSizeGigaBytes = {0} \u0413\u0411 -FileChooser.folderNameLabelText = \u0418\u043c\u044f \u043f\u0430\u043f\u043a\u0438: - -error.occured = \u041f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430: %error% -button.abort = \u041f\u0440\u0435\u0440\u0432\u0430\u0442\u044c -button.retry = \u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c -button.ignore = \u041f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c - -font.source = \u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437 \u0448\u0440\u0438\u0444\u0442\u0430: - -#after version 1.6.7: - -menu.export = \u042d\u043a\u0441\u043f\u043e\u0440\u0442 -menu.general = \u041e\u0431\u0449\u0438\u0435 -menu.language = \u042f\u0437\u044b\u043a - -startup.welcometo = \u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u0432 -startup.selectopen = \u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u0437\u043d\u0430\u0447\u043e\u043a "\u041e\u0442\u043a\u0440\u044b\u0442\u044c" \u043d\u0430 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 SWF \u0444\u0430\u0439\u043b \u0432 \u044d\u0442\u043e \u043e\u043a\u043d\u043e. - -error.font.nocharacter = \u0421\u0438\u043c\u0432\u043e\u043b "%char%" \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c \u0448\u0440\u0438\u0444\u0442\u0435. - -warning.initializers = \u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u043e\u043b\u044f \u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430\u0445.\n\u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0445 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0434\u0435\u0441\u044c, \u043d\u043e \u0438 \u0442\u0430\u043c! - -#after version 1.7.0u1: - -menu.tools.searchMemory = \u0418\u0441\u043a\u0430\u0442\u044c SWF \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 -menu.file.reload = \u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c -message.confirm.reload = \u042d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043e\u0442\u043c\u0435\u043d\u044f\u0435\u0442 \u0432\u0441\u0435 \u043d\u0435\u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043d\u043e\u0432\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 SWF \u0444\u0430\u0439\u043b.\n \u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c? - -dialog.selectbkcolor.title = \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u0430 \u0444\u043e\u043d\u0430 \u0434\u043b\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 SWF -button.selectbkcolor.hint = \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u0430 \u0444\u043e\u043d\u0430 - -ColorChooser.okText = \u041e\u041a -ColorChooser.cancelText = \u041e\u0442\u043c\u0435\u043d\u0430 -ColorChooser.resetText = \u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c -ColorChooser.previewText = \u041f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 -ColorChooser.swatchesNameText = \u041e\u0431\u0440\u0430\u0437\u0446\u044b -ColorChooser.swatchesRecentText = \u041d\u0435\u0434\u0430\u0432\u043d\u0435\u0435: -ColorChooser.sampleText = \u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430\u0434\u043f\u0438\u0441\u0438 \u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430\u0434\u043f\u0438\u0441\u0438 - -#after version 1.7.1: - -preview.play = \u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 -preview.pause = \u041f\u0430\u0443\u0437\u0430 -preview.stop = \u0421\u0442\u043e\u043f - -message.confirm.removemultiple = \u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435: %count%\n \u0438 \u0432\u0441\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0437\u0430\u0432\u0438\u0441\u044f\u0449\u0438\u0435 \u043e\u0442 \u043d\u0438\u0445? - -menu.tools.searchCache = \u041f\u043e\u0438\u0441\u043a \u0432 \u043a\u044d\u0448\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432 - -#after version 1.7.2u2 - -error.trait.exists = Trait \u0441 \u0438\u043c\u0435\u043d\u0435\u043c "%name%" \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. -button.addtrait = \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c trait -button.font.embed = \u0412\u0441\u0442\u0440\u043e\u0438\u0442\u044c... -button.yes.all = \u0414\u0430 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 -button.no.all = \u041d\u0435\u0442 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 -message.font.add.exists = \u0421\u0438\u043c\u0432\u043e\u043b %char% \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0442\u044d\u0433\u0435 \u0448\u0440\u0438\u0444\u0442\u0430.\n\u0416\u0435\u043b\u0430\u0435\u0442\u0435 \u043b\u0438 \u0412\u044b \u0435\u0433\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c? - -filter.gfx = GFx \u0444\u0430\u0439\u043b\u044b ScaleForm (*.gfx) -filter.supported = \u0412\u0441\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0442\u0438\u043f\u044b -work.canceled = \u041e\u0442\u043c\u0435\u043d\u0435\u043d\u043e -work.restoringControlFlow = \u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 -menu.advancedsettings.advancedsettings = \u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 -menu.recentFiles = \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u044b - -#after version 1.7.4 -work.restoringControlFlow.complete = \u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d -message.confirm.recentFileNotFound = \u0424\u0430\u0439\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d. \u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0435\u0433\u043e \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432? -contextmenu.closeSwf = \u0417\u0430\u043a\u0440\u044b\u0442\u044c SWF -menu.settings.autoRenameIdentifiers = \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b -menu.file.saveasexe = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u043a Exe... -filter.exe = \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (*.exe) - -#after version 1.8.0 -font.updateTexts = \u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0434\u043f\u0438\u0441\u0438 - -#after version 1.8.0u1 -menu.file.close = \u0417\u0430\u043a\u0440\u044b\u0442\u044c -menu.file.closeAll = \u0417\u0430\u043a\u0440\u044b\u0442\u044c \u0432\u0441\u0435 -menu.tools.otherTools = \u0414\u0440\u0443\u0433\u043e\u0435 -menu.tools.otherTools.clearRecentFiles = \u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 -fontName.name = \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0448\u0440\u0438\u0444\u0442\u0430: -fontName.copyright = \u0410\u0432\u0442\u043e\u0440\u0441\u043a\u043e\u0435 \u043f\u0440\u0430\u0432\u043e: -button.preview = \u041f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 -button.reset = \u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c -errors.info = \u0412 \u043b\u043e\u0433\u0435 \u0435\u0441\u0442\u044c \u0432\u0430\u0436\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u041a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430. -errors.warning = \u0412 \u043b\u043e\u0433\u0435 \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f! \u041a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430. - -decompilationError = \u041e\u0448\u0438\u0431\u043a\u0430 \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 - -disassemblingProgress.toString = \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u0442\u0440\u043e\u043a -disassemblingProgress.reading = \u0427\u0442\u0435\u043d\u0438\u0435 -disassemblingProgress.deobfuscating = \u0414\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f - -contextmenu.moveTag = \u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0442\u044d\u0433 - -filter.swc = SWC \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (*.swc) -filter.zip = ZIP \u0430\u0440\u0445\u0438\u0432\u044b (*.zip) -filter.binary = \u0411\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a - \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b (*.*) - -open.error = \u041e\u0448\u0438\u0431\u043a\u0430 -open.error.fileNotFound = \u0424\u0430\u0439\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d -open.error.cannotOpen = \u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b - -node.others = \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 - -#after version 1.8.1 -menu.tools.search = \u041f\u043e\u0438\u0441\u043a \u0442\u0435\u043a\u0441\u0442\u0430 - -#after version 1.8.1u1 -menu.tools.timeline = Timeline - -dialog.selectcolor.title = \u0412\u044b\u0431\u043e\u0440 \u0446\u0432\u0435\u0442\u0430 -button.selectcolor.hint = \u041a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0446\u0432\u0435\u0442\u0430 - -#default item name, will be used in following sentences -generictag.array.item = \u044d\u043b\u0435\u043c\u0435\u043d\u0442 -generictag.array.insertbeginning = \u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c %item% \u0432 \u043d\u0430\u0447\u0430\u043b\u043e -generictag.array.insertbefore = \u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c %item% \u043f\u0435\u0440\u0435\u0434 -generictag.array.remove = \u0423\u0434\u0430\u043b\u0438\u0442\u044c %item% -generictag.array.insertafter = \u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c %item% \u043f\u043e\u0441\u043b\u0435 -generictag.array.insertend = \u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c %item% \u0432 \u043a\u043e\u043d\u0435\u0446 - -#after version 2.0.0 -contextmenu.expandAll = \u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0435 - -filter.sounds = \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b (*.wav,*.mp3) -filter.sounds.wav = Wave \u0444\u043e\u0440\u043c\u0430\u0442 (*.wav) -filter.sounds.mp3 = MP3 \u0441\u0436\u0430\u0442\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 (*.mp3) - -error.sound.invalid = \u041d\u0435 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u0437\u0432\u0443\u043a. - -button.prev = \u041d\u0430\u0437\u0430\u0434 -button.next = \u0414\u0430\u043b\u0435\u0435 - -#after version 2.1.0 -message.action.playerglobal.title = \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 PlayerGlobal -message.action.playerglobal.needed = \u0414\u043b\u044f \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f ActionScript 3 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 "PlayerGlobal.swc" \u0441\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b Adobe.\r\n%adobehomepage%\r\n\u041d\u0430\u0436\u043c\u0438\u0442\u0435 OK, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044e. -message.action.playerglobal.place = \u0421\u043a\u0430\u0447\u0430\u0439\u0442\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 PlayerGlobal(.swc), \u0438 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u0435 \u0435\u0435 \u0432 \u043f\u0430\u043f\u043a\u0435\r\n%libpath%\r\n\u041d\u0430\u0436\u043c\u0438\u0442\u0435 OK \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f. - -message.confirm.experimental.function = \u042d\u0442\u043e \u042d\u041a\u0421\u041f\u0415\u0420\u0418\u041c\u0415\u041d\u0422\u0410\u041b\u042c\u041d\u0410\u042f \u0444\u0443\u043d\u043a\u0446\u0438\u044f. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0432\u0430\u043c \u043d\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0434\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u0438 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 swf \u0444\u0430\u0439\u043b \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e. -message.confirm.donotshowagain = \u041d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u043d\u043e\u0432\u0430 - -menu.import = \u0418\u043d\u043f\u043e\u0440\u0442 -menu.file.import.text = \u0418\u043c\u043f\u043e\u0440\u0442 \u0442\u0435\u043a\u0441\u0442\u0430 -import.select.directory = \u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043f\u0430\u043f\u043a\u0443 \u0434\u043b\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0430 -error.text.import = \u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u0442\u0435\u043a\u0441\u0442\u0430. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c? - -#after version 2.1.1 -contextmenu.removeWithDependencies = \u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438 - -abc.action.find-usages = \u041d\u0430\u0439\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f -abc.action.find-declaration = \u041d\u0430\u0439\u0442\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 - -contextmenu.rawEdit = \u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0430\u0439\u0442\u044b -contextmenu.jumpToCharacter = \u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u0438\u043c\u0432\u043e\u043b\u0443 - -menu.settings.dumpView = \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043e\u0431\u0440\u0430\u0437\u0430 - -menu.view = \u0412\u0438\u0434 -menu.file.view.resources = \u0420\u0435\u0441\u0443\u0440\u0441\u044b -menu.file.view.hex = Hex \u043e\u0431\u0440\u0430\u0437 - -node.header = \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a - -header.signature = \u041f\u043e\u0434\u043f\u0438\u0441\u044c: -header.compression = \u0421\u0436\u0430\u0442\u0438\u0435: -header.compression.lzma = LZMA -header.compression.zlib = ZLIB -header.compression.none = \u0411\u0435\u0437 \u0441\u0436\u0430\u0442\u0438\u044f -header.version = \u0412\u0435\u0440\u0441\u0438\u044f SWF: -header.gfx = GFX: -header.filesize = \u0420\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430: -header.framerate = \u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u043a\u0430\u0434\u0440\u043e\u0432: -header.framecount = \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u0430\u0434\u0440\u043e\u0432: -header.displayrect = \u041e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430: -header.displayrect.value.twips = %xmin%,%ymin% => %xmax%,%ymax% \u0442\u0432\u0438\u043f\u043e\u0432 -header.displayrect.value.pixels = %xmin%,%ymin% => %xmax%,%ymax% \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 - -#after version 2.1.2 -contextmenu.saveToFile = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0444\u0430\u0439\u043b -contextmenu.parseActions = \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 -contextmenu.parseABC = \u041f\u0430\u0440\u0441\u0438\u043d\u0433 ABC -contextmenu.parseInstructions = \u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 AVM2 - -#after version 2.1.3 -menu.deobfuscation = \u0414\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f AS1/2 -menu.file.deobfuscation.old = \u0421\u0442\u0430\u0440\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 -menu.file.deobfuscation.new = \u041d\u043e\u0432\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 - -#after version 2.1.4 -contextmenu.openswfinside = \u041e\u0442\u043a\u0440\u044b\u0442\u044c SWF \u0432\u043d\u0443\u0442\u0440\u0438 \u044d\u0442\u043e\u0433\u043e \u0442\u044d\u0433\u0430 -binarydata.swfInside = \u041f\u043e\u0445\u043e\u0436\u0435, \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u043c binary data \u0442\u044d\u0433\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f SWF. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u0442\u0443\u0442 \u0434\u043b\u044f \u0435\u0433\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u0434\u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438. - -#after version 3.0.0 -button.zoomin.hint = \u041f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c -button.zoomout.hint = \u041e\u0442\u0434\u0430\u043b\u0438\u0442\u044c -button.zoomfit.hint = \u0412\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043e\u043a\u043d\u043e -button.zoomnone.hint = \u041c\u0430\u0441\u0448\u0442\u0430\u0431 1:1 -button.snapshot.hint = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u043d\u0438\u043c\u043e\u043a \u0432 \u0431\u0443\u0444\u0435\u0440 \u043e\u0431\u043c\u0435\u043d\u0430 - -editorTruncateWarning = \u0412 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0442\u0435\u043a\u0441\u0442 \u043e\u0442\u0441\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u043d\u043e\u043c\u0435\u0440 %chars%. - -#Font name which is presented in the SWF Font tag -font.name.intag = \u0418\u043c\u044f \u0448\u0440\u0438\u0444\u0442\u0430 \u0432 \u0442\u044d\u0433\u0435: - -menu.debugger = \u041e\u0442\u043b\u0430\u0434\u0447\u0438\u043a -menu.debugger.switch = \u041e\u0442\u043b\u0430\u0434\u0447\u0438\u043a -menu.debugger.replacetrace = \u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u044b trace -menu.debugger.showlog = \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043b\u043e\u0433 - -message.debugger = \u041e\u0442\u043b\u0430\u0434\u0447\u0438\u043a SWF \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u043e\u043a\u043d\u043e \u043b\u043e\u0433\u0430, \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0438\u043b\u0438 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439.\r\n\u041e\u043d \u043d\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043a\u0430\u043a \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430, \u0442\u043e\u0447\u043a\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0438 \u0442.\u0434. - -contextmenu.addTag = \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u044d\u0433 - -deobfuscation.comment.tryenable = \u0421\u043e\u0432\u0435\u0442: \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044e" \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 -deobfuscation.comment.failed = \u0414\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430, \u043d\u043e \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u041d\u0415 \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d, \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u0435 "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044e" \u0434\u043b\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432. - -#after version 4.0.2 -preview.nextframe = \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u0430\u0434\u0440 -preview.prevframe = \u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043a\u0430\u0434\u0440 -preview.gotoframe = \u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043a\u0430\u0434\u0440\u0443... - -preview.gotoframe.dialog.title = \u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a \u043a\u0430\u0434\u0440\u0443 -preview.gotoframe.dialog.message = \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043d\u043e\u043c\u0435\u0440 \u043a\u0430\u0434\u0440\u0430 (%min% - %max%) -preview.gotoframe.dialog.frame.error = \u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u043a\u0430\u0434\u0440\u0430. \u041e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 %min% \u0434\u043e %max%. - -error.text.invalid.continue = \u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442: %text% \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 %line%. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c? - -#after version 4.0.5 -contextmenu.copyTag = \u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u044d\u0433 \u0432 -fit = fit -button.setAdvanceValues = \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f - -menu.tools.replace = \u0417\u0430\u043c\u0435\u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 - -message.confirm.close = \u0415\u0441\u0442\u044c \u043d\u0435\u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u044c {swfName}? -message.confirm.closeAll = \u0415\u0441\u0442\u044c \u043d\u0435\u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0432\u0441\u0435 SWF? - -contextmenu.exportJavaSource = \u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 Java -contextmenu.exportSwfXml = \u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c SWF \u043a\u0430\u043a XML -contextmenu.importSwfXml = \u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c SWF XML - -filter.xml = XML - -#after version 4.1.0 -contextmenu.undo = \u041e\u0442\u043c\u0435\u043d\u0430 - -text.align.left = \u0412\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c \u043f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e -text.align.right = \u0412\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c \u043f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e -text.align.center = \u0412\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c \u043f\u043e \u0446\u0435\u043d\u0442\u0440\u0443 -text.align.justify = \u0412\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c \u043f\u043e \u0448\u0438\u0440\u0438\u043d\u0435 - -text.undo = \u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f - -menu.file.import.xml = \u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c SWF XML -menu.file.export.xml = \u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c SWF XML - -#after version 4.1.1 -text.align.translatex.decrease = \u0423\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c TranslateX -text.align.translatex.increase = \u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c TranslateX -selectPreviousTag = \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0442\u044d\u0433 -selectNextTag = \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0442\u044d\u0433 -button.ignoreAll = \u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 -menu.file.import.symbolClass = \u041a\u043b\u0430\u0441\u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 +# Copyright (C) 2010-2015 JPEXS +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +menu.file = \u0424\u0430\u0439\u043b +menu.file.open = \u041e\u0442\u043a\u0440\u044b\u0442\u044c... +menu.file.save = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c +menu.file.saveas = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u043a... +menu.file.export.fla = \u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 FLA +menu.file.export.all = \u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0451 +menu.file.export.selection = \u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0435 +menu.file.exit = \u0412\u044b\u0439\u0442\u0438 + +menu.tools = \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b +menu.tools.searchas = \u041f\u043e\u0438\u0441\u043a \u043f\u043e \u0432\u0441\u0435\u043c\u0443 ActionScript... +menu.tools.proxy = \u041f\u0440\u043e\u043a\u0441\u0438 +menu.tools.deobfuscation = \u0414\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f +menu.tools.deobfuscation.pcode = \u0414\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f P-code... +menu.tools.deobfuscation.globalrename = \u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 +menu.tools.deobfuscation.renameinvalid = \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b +menu.tools.gotoDocumentClass = \u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u0443 + +menu.settings = \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 +menu.settings.autodeobfuscation = \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f +menu.settings.internalflashviewer = \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044c Flash +menu.settings.parallelspeedup = \u041c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c (\u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b) +menu.settings.disabledecompilation = \u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c) +menu.settings.addtocontextmenu = \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c FFDec \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0435 \u043c\u0435\u043d\u044e SWF \u0444\u0430\u0439\u043b\u043e\u0432 +menu.settings.language = \u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u044f\u0437\u044b\u043a +menu.settings.cacheOnDisk = \u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0434\u0438\u0441\u043a +menu.settings.gotoMainClassOnStartup = \u0412\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 + +menu.help = \u041f\u043e\u043c\u043e\u0449\u044c +menu.help.checkupdates = \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f... +menu.help.helpus = \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0442\u0435 \u043d\u0430\u0441! +menu.help.homepage = \u0414\u043e\u043c\u0430\u0448\u043d\u044f\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 +menu.help.about = \u041e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435... + +contextmenu.remove = \u0423\u0434\u0430\u043b\u0438\u0442\u044c + +button.save = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c +button.edit = \u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c +button.cancel = \u041e\u0442\u043c\u0435\u043d\u0430 +button.replace = \u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c... + +notavailonthisplatform = \u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f Windows). + +swfpreview = \u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 SWF +swfpreview.internal = \u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 SWF (\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044c) + +parameters = \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b + +rename.enternew = \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043d\u043e\u0432\u043e\u0435 \u0438\u043c\u044f: + +rename.finished.identifier = \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d. +rename.finished.multiname = %count% multiname \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043e. + +node.texts = \u0442\u0435\u043a\u0441\u0442\u044b +node.images = \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f +node.movies = \u0432\u0438\u0434\u0435\u043e +node.sounds = \u0437\u0432\u0443\u043a\u0438 +node.binaryData = \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 +node.fonts = \u0448\u0440\u0438\u0444\u0442\u044b +node.sprites = \u0441\u043f\u0440\u0430\u0439\u0442\u044b +node.shapes = \u0444\u043e\u0440\u043c\u044b +node.morphshapes = morphshapes +node.buttons = \u043a\u043d\u043e\u043f\u043a\u0438 +node.frames = \u043a\u0430\u0434\u0440\u044b +node.scripts = \u0441\u043a\u0440\u0438\u043f\u0442\u044b + +message.warning = \u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435 +message.confirm.experimental = \u041f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0432\u0440\u0435\u0434\u0438\u0442\u044c SWF \u0444\u0430\u0439\u043b \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0435\u0440\u0430\u0431\u043e\u0447\u0438\u043c.\r\n\u0418\u0421\u041f\u041e\u041b\u042c\u0417\u0423\u0419\u0422\u0415 \u041d\u0410 \u0421\u0412\u041e\u0419 \u0421\u0422\u0420\u0410\u0425 \u0418 \u0420\u0418\u0421\u041a! \u0412\u044b \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c? +message.confirm.parallel = \u041c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0438 \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e, \u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u043c\u044f\u0442\u0438. +message.confirm.on = \u0412\u041a\u041b\u044e\u0447\u0438\u0442\u044c? +message.confirm.off = \u0412\u042b\u041a\u041b\u044e\u0447\u0438\u0442\u044c? +message.confirm = \u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c + +message.confirm.autodeobfuscate = \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434.\r\n\u0414\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0435\u0442 \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e \u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \"\u043c\u0451\u0440\u0442\u0432\u043e\u0433\u043e\" \u043a\u043e\u0434\u0430.\r\n\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044e \u043b\u0443\u0447\u0448\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u043a\u043e\u0434 \u043d\u0435 \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d. + +message.parallel = \u041c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c +message.trait.saved = Trait \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d + +message.constant.new.string = \u0421\u0442\u0440\u043e\u043a\u0430 (String) "%value%" \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442. \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c? +message.constant.new.string.title = \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 (String) +message.constant.new.integer = \u0426\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e (Integer) "%value%" \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442. \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c? +message.constant.new.integer.title = \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e (Integer) +message.constant.new.unsignedinteger = \u0411\u0435\u0437\u0437\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e (Unsigned integer) "%value%" \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442. \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c? +message.constant.new.unsignedinteger.title = \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0431\u0435\u0437\u0437\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e (Unsigned integer) +message.constant.new.double = \u0414\u0440\u043e\u0431\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e (Double) "%value%" \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442. \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c? +message.constant.new.double.title = \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e (Double) + +work.buffering = \u0411\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f +work.waitingfordissasembly = \u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f +work.gettinghilights = \u041f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 +work.disassembling = \u0414\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 +work.exporting = \u042d\u043a\u0441\u043f\u043e\u0440\u0442 +work.searching = \u041f\u043e\u0438\u0441\u043a +work.renaming = \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 +work.exporting.fla = \u042d\u043a\u0441\u043f\u043e\u0440\u0442 FLA +work.renaming.identifiers = \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 +work.deobfuscating = \u0414\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f +work.decompiling = \u0414\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f +work.gettingvariables = \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 +work.reading.swf = \u0427\u0442\u0435\u043d\u0438\u0435 SWF +work.creatingwindow = \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u043a\u043d\u0430 +work.buildingscripttree = \u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0434\u0435\u0440\u0435\u0432\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 + +work.deobfuscating.complete = \u0414\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430 + +message.search.notfound = \u0422\u0435\u043a\u0441\u0442 "%searchtext%" \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d. +message.search.notfound.title = \u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e + +message.rename.notfound.multiname = \u041f\u043e\u0434 \u043a\u0443\u0440\u0441\u043e\u0440\u043e\u043c \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c multiname +message.rename.notfound.identifier = \u041f\u043e\u0434 \u043a\u0443\u0440\u0441\u043e\u0440\u043e\u043c \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 +message.rename.notfound.title = \u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e +message.rename.renamed = \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043e: %count% + +filter.images = \u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f (*.jpg,*.gif,*.png,*.bmp) +filter.fla = \u041f\u0440\u043e\u0435\u043a\u0442 %version% (*.fla) +filter.xfl = \u041d\u0435\u0441\u0436\u0430\u0442\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 %version% (*.xfl) +filter.swf = SWF \u0444\u0430\u0439\u043b\u044b (*.swf) + +error = \u041e\u0448\u0438\u0431\u043a\u0430 +error.image.invalid = \u041d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435. + +error.text.invalid = \u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442: %text% \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 %line% +error.file.save = \u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0444\u0430\u0439\u043b +error.file.write = \u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0444\u0430\u0439\u043b +error.export = \u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 + +export.select.directory = \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0430\u043f\u043a\u0443 \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 +export.finishedin = \u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0437\u0430 %time% + +update.check.title = \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 +update.check.nonewversion = \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u043d\u0435\u0442. + +message.helpus = \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\r\n%url%\r\n\u0434\u043b\u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439. +message.homepage = \u041f\u043e\u0441\u0435\u0442\u0438\u0442\u0435 \u0434\u043e\u043c\u0430\u0448\u043d\u044e\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443: \r\n%url% + +proxy = \u041f\u0440\u043e\u043a\u0441\u0438 +proxy.start = \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u043a\u0441\u0438 +proxy.stop = \u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u043a\u0441\u0438 +proxy.show = \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e\u043a\u0441\u0438 +exit = \u0412\u044b\u0439\u0442\u0438 + +panel.disassembled = P-\u043a\u043e\u0434 +panel.decompiled = ActionScript + +search.info = \u041f\u043e\u0438\u0441\u043a "%text%": +search.script = \u0421\u043a\u0440\u0438\u043f\u0442 + +constants = Constants +traits = Traits + +pleasewait = \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435 + +abc.detail.methodtrait = Method/Getter/Setter Trait +abc.detail.unsupported = - +abc.detail.slotconsttrait = Slot/Const Trait +abc.detail.traitname = \u0418\u043c\u044f: + +abc.detail.body.params.maxstack = \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0435\u043a\u0430: +abc.detail.body.params.localregcount = \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432: +abc.detail.body.params.minscope = \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438: +abc.detail.body.params.maxscope = \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438: +abc.detail.body.params.autofill = \u0410\u0432\u0442\u043e\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u043a\u043e\u0434\u0430 (\u0413\u041b\u041e\u0411\u0410\u041b\u042c\u041d\u0410\u042f \u041d\u0410\u0421\u0422\u0420\u041e\u0419\u041a\u0410) +abc.detail.body.params.autofill.experimental = ...\u042d\u041a\u0421\u041f\u0415\u0420\u0418\u041c\u0415\u041d\u0422\u0410\u041b\u042c\u041d\u041e + +abc.detail.methodinfo.methodindex = \u0418\u043d\u0434\u0435\u043a\u0441 \u043c\u0435\u0442\u043e\u0434\u0430: +abc.detail.methodinfo.parameters = \u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b: +abc.detail.methodinfo.returnvalue = \u0422\u0438\u043f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f: + +error.methodinfo.params = \u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u0445 MethodInfo +error.methodinfo.returnvalue = \u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0442\u0438\u043f\u0435 \u0432\u043e\u0437\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f MethodInfo + +abc.detail.methodinfo = MethodInfo +abc.detail.body.code = \u041a\u043e\u0434 MethodBody +abc.detail.body.params = \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b MethodBody + +abc.detail.slotconst.typevalue = \u0422\u0438\u043f \u0438 \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435: + +error.slotconst.typevalue = \u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0442\u0438\u043f\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f SlotConst + +message.autofill.failed = \u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.\r\n\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0430\u0432\u0442\u043e\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. +info.selecttrait = \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u043b\u0430\u0441\u0441 \u0438 \u043a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u043d\u0430 trait \u0432 ActionScript \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. + +button.viewgraph = \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0413\u0440\u0430\u0444\u0430 +button.viewhex = \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 Hex + +abc.traitslist.instanceinitializer = \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 +abc.traitslist.classinitializer = \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 + +action.edit.experimental = (\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e) + +message.action.saved = \u041a\u043e\u0434 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d + +error.action.save = %error% \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 %line% + +message.confirm.remove = \u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 %item%\n \u0438 \u0432\u0441\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0437\u0430\u0432\u0438\u0441\u044f\u0449\u0438\u0435 \u043e\u0442 \u043d\u0435\u0433\u043e? + +#after version 1.6.5u1: + +button.ok = OK +button.cancel = \u041e\u0442\u043c\u0435\u043d\u0430 + +font.name = \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0448\u0440\u0438\u0444\u0442\u0430: +font.isbold = \u0416\u0438\u0440\u043d\u044b\u0439: +font.isitalic = \u041a\u0443\u0440\u0441\u0438\u0432: +font.ascent = \u0412\u0435\u0440\u0445\u043d\u0438\u0439 \u0432\u044b\u043d\u043e\u0441: +font.descent = \u041d\u0438\u0436\u043d\u0438\u0439 \u0432\u044b\u043d\u043e\u0441: +font.leading = \u0418\u043d\u0442\u0435\u0440\u043b\u0438\u043d\u044c\u044f\u0436: +font.characters = \u0421\u0438\u043c\u0432\u043e\u043b\u044b: +font.characters.add = \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u044b: +value.unknown = ? + +yes = \u0434\u0430 +no = \u043d\u0435\u0442 + +errors.present = \u0412 \u043b\u043e\u0433\u0435 \u0435\u0441\u0442\u044c \u041e\u0428\u0418\u0411\u041a\u0418. \u041a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430. +errors.none = \u0412 \u043b\u043e\u0433\u0435 \u043d\u0435\u0442 \u043e\u0448\u0438\u0431\u043e\u043a. + +#after version 1.6.6: + +dialog.message.title = \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 +dialog.select.title = \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 + +button.yes = \u0414\u0430 +button.no = \u041d\u0435\u0442 + +FileChooser.openButtonText = \u041e\u0442\u043a\u0440\u044b\u0442\u044c +FileChooser.openButtonToolTipText = \u041e\u0442\u043a\u0440\u044b\u0442\u044c +FileChooser.lookInLabelText = \u0418\u0441\u043a\u0430\u0442\u044c \u0432: +FileChooser.acceptAllFileFilterText = \u0412\u0441\u0435 \u0444\u0430\u0439\u043b\u044b +FileChooser.filesOfTypeLabelText = \u0422\u0438\u043f \u0444\u0430\u0439\u043b\u043e\u0432: +FileChooser.fileNameLabelText = \u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430: +FileChooser.listViewButtonToolTipText = \u0421\u043f\u0438\u0441\u043e\u043a +FileChooser.listViewButtonAccessibleName = \u0421\u043f\u0438\u0441\u043e\u043a +FileChooser.detailsViewButtonToolTipText = \u0422\u0430\u0431\u043b\u0438\u0446\u0430 +FileChooser.detailsViewButtonAccessibleName = \u0422\u0430\u0431\u043b\u0438\u0446\u0430 +FileChooser.upFolderToolTipText = \u0412\u0432\u0435\u0440\u0445 +FileChooser.upFolderAccessibleName = \u0412\u0432\u0435\u0440\u0445 +FileChooser.homeFolderToolTipText = \u0414\u043e\u043c\u043e\u0439 +FileChooser.homeFolderAccessibleName = \u0414\u043e\u043c\u043e\u0439 +FileChooser.fileNameHeaderText = \u0418\u043c\u044f +FileChooser.fileSizeHeaderText = \u0420\u0430\u0437\u043c\u0435\u0440 +FileChooser.fileTypeHeaderText = \u0422\u0438\u043f +FileChooser.fileDateHeaderText = \u0414\u0430\u0442\u0430 +FileChooser.fileAttrHeaderText = \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b +FileChooser.openDialogTitleText = \u041e\u0442\u043a\u0440\u044b\u0442\u044c +FileChooser.directoryDescriptionText = \u041f\u0430\u043f\u043a\u0430 +FileChooser.directoryOpenButtonText = \u041e\u0442\u043a\u0440\u044b\u0442\u044c +FileChooser.directoryOpenButtonToolTipText = \u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443 +FileChooser.fileDescriptionText = \u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b +FileChooser.helpButtonText = \u041f\u043e\u043c\u043e\u0449\u044c +FileChooser.helpButtonToolTipText = \u041f\u043e\u043c\u043e\u0449\u044c \u043f\u043e \u0434\u0438\u0430\u043b\u043e\u0433\u0443 \u0432\u044b\u0431\u043e\u0440\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 +FileChooser.newFolderAccessibleName = \u041d\u043e\u0432\u0430\u044f \u043f\u0430\u043f\u043a\u0430 +FileChooser.newFolderErrorText = \u041e\u0448\u0438\u0431\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u043f\u0430\u043f\u043a\u0438 +FileChooser.newFolderToolTipText = \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443 +FileChooser.other.newFolder = \u041d\u043e\u0432\u0430\u044f\u041f\u0430\u043f\u043a\u0430 +FileChooser.other.newFolder.subsequent = \u041d\u043e\u0432\u0430\u044f\u041f\u0430\u043f\u043a\u0430.{0} +FileChooser.win32.newFolder = \u041d\u043e\u0432\u0430\u044f \u043f\u0430\u043f\u043a\u0430 +FileChooser.win32.newFolder.subsequent = \u041d\u043e\u0432\u0430\u044f \u043f\u0430\u043f\u043a\u0430 ({0}) +FileChooser.saveButtonText = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c +FileChooser.saveButtonToolTipText = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b +FileChooser.saveDialogTitleText = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c +FileChooser.saveInLabelText = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432: +FileChooser.updateButtonText = \u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c +FileChooser.updateButtonToolTipText = \u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u0430\u043f\u043a\u0438 + +#after version 1.6.6u2: + +FileChooser.detailsViewActionLabel.textAndMnemonic = \u0422\u0430\u0431\u043b\u0438\u0446\u0430 +FileChooser.detailsViewButtonToolTip.textAndMnemonic = \u0422\u0430\u0431\u043b\u0438\u0446\u0430 +FileChooser.fileAttrHeader.textAndMnemonic = \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b +FileChooser.fileDateHeader.textAndMnemonic = \u0418\u0437\u043c\u0435\u043d\u0435\u043d +FileChooser.fileNameHeader.textAndMnemonic = \u0418\u043c\u044f +FileChooser.fileNameLabel.textAndMnemonic = \u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430: +FileChooser.fileSizeHeader.textAndMnemonic = \u0420\u0430\u0437\u043c\u0435\u0440 +FileChooser.fileTypeHeader.textAndMnemonic = \u0422\u0438\u043f +FileChooser.filesOfTypeLabel.textAndMnemonic = \u0424\u0430\u0439\u043b\u044b \u0442\u0438\u043f\u0430: +FileChooser.folderNameLabel.textAndMnemonic = \u0418\u043c\u044f \u043f\u0430\u043f\u043a\u0438: +FileChooser.homeFolderToolTip.textAndMnemonic = \u0414\u043e\u043c\u043e\u0439 +FileChooser.listViewActionLabel.textAndMnemonic = \u0421\u043f\u0438\u0441\u043e\u043a +FileChooser.listViewButtonToolTip.textAndMnemonic = \u0421\u043f\u0438\u0441\u043e\u043a +FileChooser.lookInLabel.textAndMnemonic = \u0418\u0441\u043a\u0430\u0442\u044c \u0432: +FileChooser.newFolderActionLabel.textAndMnemonic = \u041d\u043e\u0432\u0430\u044f \u043f\u0430\u043f\u043a\u0430 +FileChooser.newFolderToolTip.textAndMnemonic = \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443 +FileChooser.refreshActionLabel.textAndMnemonic = \u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c +FileChooser.saveInLabel.textAndMnemonic = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432: +FileChooser.upFolderToolTip.textAndMnemonic = \u0412\u0432\u0435\u0440\u0445 +FileChooser.viewMenuButtonAccessibleName = \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u041c\u0435\u043d\u044e +FileChooser.viewMenuButtonToolTipText = \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u041c\u0435\u043d\u044e +FileChooser.viewMenuLabel.textAndMnemonic = \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 +FileChooser.newFolderActionLabelText = \u041d\u043e\u0432\u0430\u044f \u043f\u0430\u043f\u043a\u0430 +FileChooser.listViewActionLabelText = \u0421\u043f\u0438\u0441\u043e\u043a +FileChooser.detailsViewActionLabelText = \u0422\u0430\u0431\u043b\u0438\u0446\u0430 +FileChooser.refreshActionLabelText = \u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c +FileChooser.sortMenuLabelText = \u0423\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u043a\u0438 +FileChooser.viewMenuLabelText = \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 +FileChooser.fileSizeKiloBytes = {0} \u041a\u0411 +FileChooser.fileSizeMegaBytes = {0} \u041c\u0411 +FileChooser.fileSizeGigaBytes = {0} \u0413\u0411 +FileChooser.folderNameLabelText = \u0418\u043c\u044f \u043f\u0430\u043f\u043a\u0438: + +error.occured = \u041f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430: %error% +button.abort = \u041f\u0440\u0435\u0440\u0432\u0430\u0442\u044c +button.retry = \u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c +button.ignore = \u041f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c + +font.source = \u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437 \u0448\u0440\u0438\u0444\u0442\u0430: + +#after version 1.6.7: + +menu.export = \u042d\u043a\u0441\u043f\u043e\u0440\u0442 +menu.general = \u041e\u0431\u0449\u0438\u0435 +menu.language = \u042f\u0437\u044b\u043a + +startup.welcometo = \u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u0432 +startup.selectopen = \u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u0437\u043d\u0430\u0447\u043e\u043a "\u041e\u0442\u043a\u0440\u044b\u0442\u044c" \u043d\u0430 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 SWF \u0444\u0430\u0439\u043b \u0432 \u044d\u0442\u043e \u043e\u043a\u043d\u043e. + +error.font.nocharacter = \u0421\u0438\u043c\u0432\u043e\u043b "%char%" \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c \u0448\u0440\u0438\u0444\u0442\u0435. + +warning.initializers = \u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u043e\u043b\u044f \u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430\u0445.\n\u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0445 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0434\u0435\u0441\u044c, \u043d\u043e \u0438 \u0442\u0430\u043c! + +#after version 1.7.0u1: + +menu.tools.searchMemory = \u0418\u0441\u043a\u0430\u0442\u044c SWF \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 +menu.file.reload = \u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c +message.confirm.reload = \u042d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043e\u0442\u043c\u0435\u043d\u044f\u0435\u0442 \u0432\u0441\u0435 \u043d\u0435\u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043d\u043e\u0432\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 SWF \u0444\u0430\u0439\u043b.\n \u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c? + +dialog.selectbkcolor.title = \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u0430 \u0444\u043e\u043d\u0430 \u0434\u043b\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 SWF +button.selectbkcolor.hint = \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u0430 \u0444\u043e\u043d\u0430 + +ColorChooser.okText = \u041e\u041a +ColorChooser.cancelText = \u041e\u0442\u043c\u0435\u043d\u0430 +ColorChooser.resetText = \u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c +ColorChooser.previewText = \u041f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 +ColorChooser.swatchesNameText = \u041e\u0431\u0440\u0430\u0437\u0446\u044b +ColorChooser.swatchesRecentText = \u041d\u0435\u0434\u0430\u0432\u043d\u0435\u0435: +ColorChooser.sampleText = \u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430\u0434\u043f\u0438\u0441\u0438 \u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430\u0434\u043f\u0438\u0441\u0438 + +#after version 1.7.1: + +preview.play = \u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 +preview.pause = \u041f\u0430\u0443\u0437\u0430 +preview.stop = \u0421\u0442\u043e\u043f + +message.confirm.removemultiple = \u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435: %count%\n \u0438 \u0432\u0441\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0437\u0430\u0432\u0438\u0441\u044f\u0449\u0438\u0435 \u043e\u0442 \u043d\u0438\u0445? + +menu.tools.searchCache = \u041f\u043e\u0438\u0441\u043a \u0432 \u043a\u044d\u0448\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432 + +#after version 1.7.2u2 + +error.trait.exists = Trait \u0441 \u0438\u043c\u0435\u043d\u0435\u043c "%name%" \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. +button.addtrait = \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c trait +button.font.embed = \u0412\u0441\u0442\u0440\u043e\u0438\u0442\u044c... +button.yes.all = \u0414\u0430 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 +button.no.all = \u041d\u0435\u0442 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 +message.font.add.exists = \u0421\u0438\u043c\u0432\u043e\u043b %char% \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0442\u044d\u0433\u0435 \u0448\u0440\u0438\u0444\u0442\u0430.\n\u0416\u0435\u043b\u0430\u0435\u0442\u0435 \u043b\u0438 \u0412\u044b \u0435\u0433\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c? + +filter.gfx = GFx \u0444\u0430\u0439\u043b\u044b ScaleForm (*.gfx) +filter.supported = \u0412\u0441\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0442\u0438\u043f\u044b +work.canceled = \u041e\u0442\u043c\u0435\u043d\u0435\u043d\u043e +work.restoringControlFlow = \u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 +menu.advancedsettings.advancedsettings = \u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 +menu.recentFiles = \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u044b + +#after version 1.7.4 +work.restoringControlFlow.complete = \u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d +message.confirm.recentFileNotFound = \u0424\u0430\u0439\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d. \u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0435\u0433\u043e \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432? +contextmenu.closeSwf = \u0417\u0430\u043a\u0440\u044b\u0442\u044c SWF +menu.settings.autoRenameIdentifiers = \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b +menu.file.saveasexe = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u043a Exe... +filter.exe = \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (*.exe) + +#after version 1.8.0 +font.updateTexts = \u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0434\u043f\u0438\u0441\u0438 + +#after version 1.8.0u1 +menu.file.close = \u0417\u0430\u043a\u0440\u044b\u0442\u044c +menu.file.closeAll = \u0417\u0430\u043a\u0440\u044b\u0442\u044c \u0432\u0441\u0435 +menu.tools.otherTools = \u0414\u0440\u0443\u0433\u043e\u0435 +menu.tools.otherTools.clearRecentFiles = \u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 +fontName.name = \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0448\u0440\u0438\u0444\u0442\u0430: +fontName.copyright = \u0410\u0432\u0442\u043e\u0440\u0441\u043a\u043e\u0435 \u043f\u0440\u0430\u0432\u043e: +button.preview = \u041f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 +button.reset = \u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c +errors.info = \u0412 \u043b\u043e\u0433\u0435 \u0435\u0441\u0442\u044c \u0432\u0430\u0436\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u041a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430. +errors.warning = \u0412 \u043b\u043e\u0433\u0435 \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f! \u041a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430. + +decompilationError = \u041e\u0448\u0438\u0431\u043a\u0430 \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 + +disassemblingProgress.toString = \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u0442\u0440\u043e\u043a +disassemblingProgress.reading = \u0427\u0442\u0435\u043d\u0438\u0435 +disassemblingProgress.deobfuscating = \u0414\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f + +contextmenu.moveTag = \u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0442\u044d\u0433 + +filter.swc = SWC \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (*.swc) +filter.zip = ZIP \u0430\u0440\u0445\u0438\u0432\u044b (*.zip) +filter.binary = \u0411\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a - \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b (*.*) + +open.error = \u041e\u0448\u0438\u0431\u043a\u0430 +open.error.fileNotFound = \u0424\u0430\u0439\u043b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d +open.error.cannotOpen = \u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b + +node.others = \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 + +#after version 1.8.1 +menu.tools.search = \u041f\u043e\u0438\u0441\u043a \u0442\u0435\u043a\u0441\u0442\u0430 + +#after version 1.8.1u1 +menu.tools.timeline = Timeline + +dialog.selectcolor.title = \u0412\u044b\u0431\u043e\u0440 \u0446\u0432\u0435\u0442\u0430 +button.selectcolor.hint = \u041a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0446\u0432\u0435\u0442\u0430 + +#default item name, will be used in following sentences +generictag.array.item = \u044d\u043b\u0435\u043c\u0435\u043d\u0442 +generictag.array.insertbeginning = \u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c %item% \u0432 \u043d\u0430\u0447\u0430\u043b\u043e +generictag.array.insertbefore = \u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c %item% \u043f\u0435\u0440\u0435\u0434 +generictag.array.remove = \u0423\u0434\u0430\u043b\u0438\u0442\u044c %item% +generictag.array.insertafter = \u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c %item% \u043f\u043e\u0441\u043b\u0435 +generictag.array.insertend = \u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c %item% \u0432 \u043a\u043e\u043d\u0435\u0446 + +#after version 2.0.0 +contextmenu.expandAll = \u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0435 + +filter.sounds = \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b (*.wav,*.mp3) +filter.sounds.wav = Wave \u0444\u043e\u0440\u043c\u0430\u0442 (*.wav) +filter.sounds.mp3 = MP3 \u0441\u0436\u0430\u0442\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 (*.mp3) + +error.sound.invalid = \u041d\u0435 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u0437\u0432\u0443\u043a. + +button.prev = \u041d\u0430\u0437\u0430\u0434 +button.next = \u0414\u0430\u043b\u0435\u0435 + +#after version 2.1.0 +message.action.playerglobal.title = \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 PlayerGlobal +message.action.playerglobal.needed = \u0414\u043b\u044f \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f ActionScript 3 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 "PlayerGlobal.swc" \u0441\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b Adobe.\r\n%adobehomepage%\r\n\u041d\u0430\u0436\u043c\u0438\u0442\u0435 OK, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044e. +message.action.playerglobal.place = \u0421\u043a\u0430\u0447\u0430\u0439\u0442\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 PlayerGlobal(.swc), \u0438 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u0435 \u0435\u0435 \u0432 \u043f\u0430\u043f\u043a\u0435\r\n%libpath%\r\n\u041d\u0430\u0436\u043c\u0438\u0442\u0435 OK \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f. + +message.confirm.experimental.function = \u042d\u0442\u043e \u042d\u041a\u0421\u041f\u0415\u0420\u0418\u041c\u0415\u041d\u0422\u0410\u041b\u042c\u041d\u0410\u042f \u0444\u0443\u043d\u043a\u0446\u0438\u044f. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0432\u0430\u043c \u043d\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0434\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u0438 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 swf \u0444\u0430\u0439\u043b \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e. +message.confirm.donotshowagain = \u041d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u043d\u043e\u0432\u0430 + +menu.import = \u0418\u043d\u043f\u043e\u0440\u0442 +menu.file.import.text = \u0418\u043c\u043f\u043e\u0440\u0442 \u0442\u0435\u043a\u0441\u0442\u0430 +import.select.directory = \u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043f\u0430\u043f\u043a\u0443 \u0434\u043b\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0430 +error.text.import = \u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u0442\u0435\u043a\u0441\u0442\u0430. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c? + +#after version 2.1.1 +contextmenu.removeWithDependencies = \u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438 + +abc.action.find-usages = \u041d\u0430\u0439\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f +abc.action.find-declaration = \u041d\u0430\u0439\u0442\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 + +contextmenu.rawEdit = \u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0430\u0439\u0442\u044b +contextmenu.jumpToCharacter = \u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u0438\u043c\u0432\u043e\u043b\u0443 + +menu.settings.dumpView = \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043e\u0431\u0440\u0430\u0437\u0430 + +menu.view = \u0412\u0438\u0434 +menu.file.view.resources = \u0420\u0435\u0441\u0443\u0440\u0441\u044b +menu.file.view.hex = Hex \u043e\u0431\u0440\u0430\u0437 + +node.header = \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a + +header.signature = \u041f\u043e\u0434\u043f\u0438\u0441\u044c: +header.compression = \u0421\u0436\u0430\u0442\u0438\u0435: +header.compression.lzma = LZMA +header.compression.zlib = ZLIB +header.compression.none = \u0411\u0435\u0437 \u0441\u0436\u0430\u0442\u0438\u044f +header.version = \u0412\u0435\u0440\u0441\u0438\u044f SWF: +header.gfx = GFX: +header.filesize = \u0420\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430: +header.framerate = \u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u043a\u0430\u0434\u0440\u043e\u0432: +header.framecount = \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u0430\u0434\u0440\u043e\u0432: +header.displayrect = \u041e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430: +header.displayrect.value.twips = %xmin%,%ymin% => %xmax%,%ymax% \u0442\u0432\u0438\u043f\u043e\u0432 +header.displayrect.value.pixels = %xmin%,%ymin% => %xmax%,%ymax% \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 + +#after version 2.1.2 +contextmenu.saveToFile = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0444\u0430\u0439\u043b +contextmenu.parseActions = \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 +contextmenu.parseABC = \u041f\u0430\u0440\u0441\u0438\u043d\u0433 ABC +contextmenu.parseInstructions = \u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 AVM2 + +#after version 2.1.3 +menu.deobfuscation = \u0414\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f +menu.file.deobfuscation.old = \u0421\u0442\u0430\u0440\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 +menu.file.deobfuscation.new = \u041d\u043e\u0432\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 + +#after version 2.1.4 +contextmenu.openswfinside = \u041e\u0442\u043a\u0440\u044b\u0442\u044c SWF \u0432\u043d\u0443\u0442\u0440\u0438 \u044d\u0442\u043e\u0433\u043e \u0442\u044d\u0433\u0430 +binarydata.swfInside = \u041f\u043e\u0445\u043e\u0436\u0435, \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u043c binary data \u0442\u044d\u0433\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f SWF. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u0442\u0443\u0442 \u0434\u043b\u044f \u0435\u0433\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u0434\u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438. + +#after version 3.0.0 +button.zoomin.hint = \u041f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c +button.zoomout.hint = \u041e\u0442\u0434\u0430\u043b\u0438\u0442\u044c +button.zoomfit.hint = \u0412\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043e\u043a\u043d\u043e +button.zoomnone.hint = \u041c\u0430\u0441\u0448\u0442\u0430\u0431 1:1 +button.snapshot.hint = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u043d\u0438\u043c\u043e\u043a \u0432 \u0431\u0443\u0444\u0435\u0440 \u043e\u0431\u043c\u0435\u043d\u0430 + +editorTruncateWarning = \u0412 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0442\u0435\u043a\u0441\u0442 \u043e\u0442\u0441\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u043d\u043e\u043c\u0435\u0440 %chars%. + +#Font name which is presented in the SWF Font tag +font.name.intag = \u0418\u043c\u044f \u0448\u0440\u0438\u0444\u0442\u0430 \u0432 \u0442\u044d\u0433\u0435: + +menu.debugger = \u041e\u0442\u043b\u0430\u0434\u0447\u0438\u043a +menu.debugger.switch = \u041e\u0442\u043b\u0430\u0434\u0447\u0438\u043a +menu.debugger.replacetrace = \u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u044b trace +menu.debugger.showlog = \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043b\u043e\u0433 + +message.debugger = \u041e\u0442\u043b\u0430\u0434\u0447\u0438\u043a SWF \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u043e\u043a\u043d\u043e \u043b\u043e\u0433\u0430, \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0438\u043b\u0438 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439.\r\n\u041e\u043d \u043d\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043a\u0430\u043a \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430, \u0442\u043e\u0447\u043a\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0438 \u0442.\u0434. + +contextmenu.addTag = \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u044d\u0433 + +deobfuscation.comment.tryenable = \u0421\u043e\u0432\u0435\u0442: \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044e" \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 +deobfuscation.comment.failed = \u0414\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430, \u043d\u043e \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u041d\u0415 \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d, \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u0435 "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044e" \u0434\u043b\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432. + +#after version 4.0.2 +preview.nextframe = \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u0430\u0434\u0440 +preview.prevframe = \u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043a\u0430\u0434\u0440 +preview.gotoframe = \u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043a\u0430\u0434\u0440\u0443... + +preview.gotoframe.dialog.title = \u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a \u043a\u0430\u0434\u0440\u0443 +preview.gotoframe.dialog.message = \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043d\u043e\u043c\u0435\u0440 \u043a\u0430\u0434\u0440\u0430 (%min% - %max%) +preview.gotoframe.dialog.frame.error = \u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u043a\u0430\u0434\u0440\u0430. \u041e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 %min% \u0434\u043e %max%. + +error.text.invalid.continue = \u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442: %text% \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 %line%. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c? + +#after version 4.0.5 +contextmenu.copyTag = \u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u044d\u0433 \u0432 +fit = fit +button.setAdvanceValues = \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f + +menu.tools.replace = \u0417\u0430\u043c\u0435\u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 + +message.confirm.close = \u0415\u0441\u0442\u044c \u043d\u0435\u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u044c {swfName}? +message.confirm.closeAll = \u0415\u0441\u0442\u044c \u043d\u0435\u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0432\u0441\u0435 SWF? + +contextmenu.exportJavaSource = \u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 Java +contextmenu.exportSwfXml = \u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c SWF \u043a\u0430\u043a XML +contextmenu.importSwfXml = \u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c SWF XML + +filter.xml = XML + +#after version 4.1.0 +contextmenu.undo = \u041e\u0442\u043c\u0435\u043d\u0430 + +text.align.left = \u0412\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c \u043f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e +text.align.right = \u0412\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c \u043f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e +text.align.center = \u0412\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c \u043f\u043e \u0446\u0435\u043d\u0442\u0440\u0443 +text.align.justify = \u0412\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c \u043f\u043e \u0448\u0438\u0440\u0438\u043d\u0435 + +text.undo = \u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f + +menu.file.import.xml = \u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c SWF XML +menu.file.export.xml = \u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c SWF XML + +#after version 4.1.1 +text.align.translatex.decrease = \u0423\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c TranslateX +text.align.translatex.increase = \u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c TranslateX +selectPreviousTag = \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0442\u044d\u0433 +selectNextTag = \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0442\u044d\u0433 +button.ignoreAll = \u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 +menu.file.import.symbolClass = \u041a\u043b\u0430\u0441\u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_sv.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_sv.properties index df9083949..cfaa65488 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_sv.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_sv.properties @@ -1,616 +1,616 @@ -# Copyright (C) 2010-2015 JPEXS -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -menu.file = Fil -menu.file.open = \u00d6ppna... -menu.file.save = Spara -menu.file.saveas = Spara som... -menu.file.export.fla = Exportera till FLA -menu.file.export.all = Exportera alla delar -menu.file.export.selection = Exportera markering -menu.file.exit = St\u00e4ng - -menu.tools = Verktyg -menu.tools.searchas = S\u00f6k igenom alla ActionSkript... -menu.tools.proxy = Proxy -menu.tools.deobfuscation = Avl\u00e4gsna obfuskering -menu.tools.deobfuscation.pcode = Avl\u00e4gsna obfuskerad Bytekod... -menu.tools.deobfuscation.globalrename = Byt namn p\u00e5 global identifierare -menu.tools.deobfuscation.renameinvalid = Byt namn p\u00e5 felaktiga identifierare -menu.tools.gotoDocumentClass = G\u00e5 till dokumentklass - -menu.settings = Inst\u00e4llningar -menu.settings.autodeobfuscation = Automatiskt avl\u00e4gsning av obfuskering -menu.settings.internalflashviewer = Anv\u00e4nd egen Flash-spelare -menu.settings.parallelspeedup = Parallell uppsnabbning -menu.settings.disabledecompilation = Inaktivera dekompilering (Demontera endast) -menu.settings.addtocontextmenu = L\u00e4gg till FFDec till SWF-filernas snabbmeny -menu.settings.language = Byt spr\u00e5k -menu.settings.cacheOnDisk = Anv\u00e4nd cachelagring p\u00e5 h\u00e5rddisken -menu.settings.gotoMainClassOnStartup = Markera dokumentklass vid uppstart - -menu.help = Hj\u00e4lp -menu.help.checkupdates = Leta efter uppdateringar... -menu.help.helpus = Hj\u00e4lp oss! -menu.help.homepage = Bes\u00f6k hemsidan -menu.help.about = Om... - -contextmenu.remove = Ta bort - -button.save = Spara -button.edit = \u00c4ndra -button.cancel = \u00c5ngra -button.replace = Ers\u00e4tt... - -notavailonthisplatform = F\u00f6rhandsgranskning av detta objekt \u00e4r inte tillg\u00e4nglig p\u00e5 denna plattform. (Windows bara) - -swfpreview = SWF f\u00f6rhandsvisning -swfpreview.internal = SWF f\u00f6rhandsvisning (Intern f\u00f6rhandsvisning) - -parameters = Parametrar - -rename.enternew = Ange det nya namnet: - -rename.finished.identifier = Identifierare omd\u00f6pt. -rename.finished.multiname = %count% multiname har blivit omd\u00f6pt(a). - -node.texts = texter -node.images = bilder -node.movies = filmer -node.sounds = ljud -node.binaryData = bin\u00e4rData -node.fonts = teckensnitt -node.sprites = sprites -node.shapes = former -node.morphshapes = morphform -node.buttons = knappar -node.frames = ramar -node.scripts = skript - -message.warning = Varning -message.confirm.experimental = F\u00f6ljande tillv\u00e4gag\u00e5ngss\u00e4tt kan skada SWF-filen som kan d\u00e4refter bli ospelbar.\r\nANV\u00c4ND DEN P\u00c5 DIN EGEN RISK. Vill du forts\u00e4tta? -message.confirm.parallel = Parallellitet kan snabba upp laddning och dekompilering, men anv\u00e4nda mera minne. -message.confirm.on = Vill du aktivera detta? -message.confirm.off = Vill du avaktivera detta? -message.confirm = Bekr\u00e4fta - -message.confirm.autodeobfuscate = Automatiskt avl\u00e4gsning av obfuskering \u00e4r ett s\u00e4tt till att dekompilera obfuskerad kod.\r\nAvl\u00e4gsna obfuskerad kod leder till sl\u00f6are dekompilering och n\u00e5gon d\u00f6d kod kan bli borttagen..\r\nOm koden inte \u00e4r obfuskerad, s\u00e5 \u00e4r det b\u00e4ttre att st\u00e4nga av automatisk borttagning av obfuskering. - -message.parallel = parallellitet -message.trait.saved = Egenskap har sparats - -message.constant.new.string = Str\u00e4ng "%value%" finns inte i konstant tabellen. Vill du l\u00e4gga till det? -message.constant.new.string.title = L\u00e4gg till Str\u00e4ng -message.constant.new.integer = Heltal v\u00e4rde "%value%" finns inte i konstant tabellen. Vill du l\u00e4gga till det? -message.constant.new.integer.title = L\u00e4gg till Heltal -message.constant.new.unsignedinteger = Osignerat heltal v\u00e4rde "%value%" finns inte i konstant tabellen. Vill du l\u00e4gga till det? -message.constant.new.unsignedinteger.title = L\u00e4gg till Osignerat heltal -message.constant.new.double = Dubbelt v\u00e4rde "%value%" finns inte i konstant tabellen. Vill du l\u00e4gga till det? -message.constant.new.double.title = L\u00e4gg till Dubbel - -work.buffering = Buffrar -work.waitingfordissasembly = V\u00e4ntar p\u00e5 demontering -work.gettinghilights = Getting hilights -work.disassembling = Demonterar -work.exporting = Exporterar -work.searching = S\u00f6ker -work.renaming = \u00c4ndrar namn -work.exporting.fla = Exporterar FLA -work.renaming.identifiers = \u00c4ndrar namn p\u00e5 identifierare -work.deobfuscating = Avl\u00e4gsning utav obfuskering -work.decompiling = Dekompilering -work.gettingvariables = Tar variablar -work.reading.swf = L\u00e4ser SWF -work.creatingwindow = Skapar f\u00f6nster -work.buildingscripttree = Bygger skript tr\u00e4 - -work.deobfuscating.complete = Avl\u00e4gsning utav obfuskering \u00e4r nu f\u00e4rdig - -message.search.notfound = Str\u00e4ng "%searchtext%" hittades inte. -message.search.notfound.title = Hittades inte - -message.rename.notfound.multiname = Ingen multiname hittades under mark\u00f6ren -message.rename.notfound.identifier = ingen identifiering hittades under mark\u00f6ren -message.rename.notfound.title = Hittades inte -message.rename.renamed = Identifierare som har \u00e4ndrat namn: %count% - -filter.images = Bilder (*.jpg,*.gif,*.png,*.bmp) -filter.fla = %version% Dokument (*.fla) -filter.xfl = %version% Okomprimerat Dokument (*.xfl) -filter.swf = SWF filer (*.swf) - -error = Fel -error.image.invalid = Ogiltig bild. - -error.text.invalid = Ogiltig text: %text% p\u00e5 rad %line% -error.file.save = Kan inte spara filen -error.file.write = Kan inte skriva till filen -error.export = Fel under loppet av exporteringen - -export.select.directory = V\u00e4lj s\u00f6kv\u00e4g till katalog att exportera -export.finishedin = Exporterades i %time% - -update.check.title = Uppdaterings koll -update.check.nonewversion = Ingen ny version finns tillg\u00e4nglig. - -message.helpus = V\u00e4nligen bes\u00f6k\r\n%url%\r\nf\u00f6r mer detaljer. -message.homepage = Bes\u00f6k hemsidan: \r\n%url% - -proxy = Proxy -proxy.start = Starta proxy -proxy.stop = Stoppa proxy -proxy.show = Visa proxy -exit = St\u00e4ng - -panel.disassembled = P-code k\u00e4llkod -panel.decompiled = ActionSkript k\u00e4llkod - -search.info = S\u00f6k efter "%text%" : -search.script = Skript - -constants = Konstanter -traits = Egenskaper - -pleasewait = V\u00e4nligen v\u00e4nta - -abc.detail.methodtrait = Metod/F\u00e5ngare/Egenskap s\u00e4ttare -abc.detail.unsupported = - -abc.detail.slotconsttrait = Slot/Const Egenskap -abc.detail.traitname = Namn: - -abc.detail.body.params.maxstack = Maximal stapling: -abc.detail.body.params.localregcount = Lokala register r\u00e4knade: -abc.detail.body.params.minscope = Minsta omfattnings djup: -abc.detail.body.params.maxscope = Maximal omfattnings djup: -abc.detail.body.params.autofill = Automatisk utfyllnad n\u00e4r koden sparas (GLOBAL INST\u00c4LLNING) -abc.detail.body.params.autofill.experimental = ...EXPERIMENTELL - -abc.detail.methodinfo.methodindex = Metod register: -abc.detail.methodinfo.parameters = Parametrar: -abc.detail.methodinfo.returnvalue = \u00c5terl\u00e4mna v\u00e4rde: - -error.methodinfo.params = MetodInfo Parameter fel -error.methodinfo.returnvalue = MetodInfo \u00e5terl\u00e4mmnings typ Fel - -abc.detail.methodinfo = MetodInfo -abc.detail.body.code = MetodInfo Kod -abc.detail.body.params = MetodKropp parametrar - -abc.detail.slotconst.typevalue = Typ och V\u00e4rde: - -error.slotconst.typevalue = SlotConst typv\u00e4rde felaktighet - -message.autofill.failed = Kan inte f\u00e5 statistik koden f\u00f6r automatisk kropps-parametrar.\r\nAvmarkera automatisk ifyllnad f\u00f6r att undvika det h\u00e4r meddelandet. -info.selecttrait = V\u00e4lj klass och klicka p\u00e5 en egenskap i Actionskript k\u00e4llan f\u00f6r att redigera den. - -button.viewgraph = Visa Diagram -button.viewhex = Visa Hex - -abc.traitslist.instanceinitializer = instans initierare -abc.traitslist.classinitializer = klass initierare - -action.edit.experimental = (experimentellt) - -message.action.saved = Koden har sparats - -error.action.save = %error% p\u00e5 rad %line% - -message.confirm.remove = \u00c4r du s\u00e4ker p\u00e5 att du vill ta bort %item% \n och alla objekt som \u00e4r beroende av den? - -#after version 1.6.5u1: - -button.ok = Godk\u00e4nn -button.cancel = Avbryt - -font.name = Typsnitts namn: -font.isbold = \u00c4r fet: -font.isitalic = \u00c4r kursiv: -font.ascent = Stigande: -font.descent = Nedstigande: -font.leading = Ledande: -font.characters = Bokst\u00e4ver: -font.characters.add = L\u00e4gg till bokst\u00e4ver: -value.unknown = ? - -yes = ja -no = nej - -errors.present = Det finns FEL i loggen. Klicka f\u00f6r att visa loggen. -errors.none = Det finns inga fel i loggen - -#after version 1.6.6: - -dialog.message.title = Meddelande -dialog.select.title = V\u00e4lj ett alternativ - -button.yes = Ja -button.no = Nej - -FileChooser.openButtonText = \u00d6ppna -FileChooser.openButtonToolTipText = \u00d6ppna -FileChooser.lookInLabelText = Alla Filer -FileChooser.acceptAllFileFilterText = Kolla i: -FileChooser.filesOfTypeLabelText = Filformat: -FileChooser.fileNameLabelText = Filnamn: -FileChooser.listViewButtonToolTipText = Lista -FileChooser.listViewButtonAccessibleName = Lista -FileChooser.detailsViewButtonToolTipText = Detaljer -FileChooser.detailsViewButtonAccessibleName = Detaljer -FileChooser.upFolderToolTipText = Upp en niv\u00e5 -FileChooser.upFolderAccessibleName = Upp en niv\u00e5 -FileChooser.homeFolderToolTipText = Hem -FileChooser.homeFolderAccessibleName = Hem -FileChooser.fileNameHeaderText = Namn -FileChooser.fileSizeHeaderText = Storlek -FileChooser.fileTypeHeaderText = Typ -FileChooser.fileDateHeaderText = Datum -FileChooser.fileAttrHeaderText = Egenskaper -FileChooser.openDialogTitleText = \u00d6ppna -FileChooser.directoryDescriptionText = Katalog -FileChooser.directoryOpenButtonText = \u00d6ppna -FileChooser.directoryOpenButtonToolTipText = \u00d6ppna vald katalog -FileChooser.fileDescriptionText = Generic File -FileChooser.helpButtonText = Hj\u00e4lp -FileChooser.helpButtonToolTipText = FileChooser help -FileChooser.newFolderAccessibleName = Ny mapp -FileChooser.newFolderErrorText = N\u00e5got gick fel n\u00e4r den f\u00f6rs\u00f6kta skapa en ny mapp -FileChooser.newFolderToolTipText = Skapa ny mapp -FileChooser.other.newFolder = NyMapp -FileChooser.other.newFolder.subsequent = NyMapp.{0} -FileChooser.win32.newFolder = Ny mapp -FileChooser.win32.newFolder.subsequent = Ny mapp ({0}) -FileChooser.saveButtonText = Spara -FileChooser.saveButtonToolTipText = Spara vald fil -FileChooser.saveDialogTitleText = Spara -FileChooser.saveInLabelText = Spara i: -FileChooser.updateButtonText = Uppdatera -FileChooser.updateButtonToolTipText = Uppdatera kataloglistning - -#after version 1.6.6u2: - -FileChooser.detailsViewActionLabel.textAndMnemonic = Detaljer -FileChooser.detailsViewButtonToolTip.textAndMnemonic = Detaljer -FileChooser.fileAttrHeader.textAndMnemonic = Egenskaper -FileChooser.fileDateHeader.textAndMnemonic = Modifierad -FileChooser.fileNameHeader.textAndMnemonic = Namn -FileChooser.fileNameLabel.textAndMnemonic = Filnamn: -FileChooser.fileSizeHeader.textAndMnemonic = Storlek -FileChooser.fileTypeHeader.textAndMnemonic = Typ -FileChooser.filesOfTypeLabel.textAndMnemonic = Filformat: -FileChooser.folderNameLabel.textAndMnemonic = Mappnamn: -FileChooser.homeFolderToolTip.textAndMnemonic = Hem -FileChooser.listViewActionLabel.textAndMnemonic = Lista -FileChooser.listViewButtonToolTip.textAndMnemonic = Lista -FileChooser.lookInLabel.textAndMnemonic = Kolla i: -FileChooser.newFolderActionLabel.textAndMnemonic = Ny mapp -FileChooser.newFolderToolTip.textAndMnemonic = Skapa Ny Mapp -FileChooser.refreshActionLabel.textAndMnemonic = Refresh -FileChooser.saveInLabel.textAndMnemonic = Spara i: -FileChooser.upFolderToolTip.textAndMnemonic = Upp en niv\u00e5 -FileChooser.viewMenuButtonAccessibleName = Visa meny -FileChooser.viewMenuButtonToolTipText = Visa meny -FileChooser.viewMenuLabel.textAndMnemonic = Visa -FileChooser.newFolderActionLabelText = Ny mapp -FileChooser.listViewActionLabelText = Lista -FileChooser.detailsViewActionLabelText = Detaljer -FileChooser.refreshActionLabelText = Uppdatera -FileChooser.sortMenuLabelText = Ordna ikoner efter -FileChooser.viewMenuLabelText = Visa -FileChooser.fileSizeKiloBytes = {0} KB -FileChooser.fileSizeMegaBytes = {0} MB -FileChooser.fileSizeGigaBytes = {0} GB -FileChooser.folderNameLabelText = Mappnamn: - -error.occured = Ett fel uppstod : %error% -button.abort = Avbryt -button.retry = F\u00f6rs\u00f6k igen -button.ignore = Ignorera - -font.source = Typsnitts k\u00e4lla: - -#after version 1.6.7: - -menu.export = Exportera -menu.general = Allm\u00e4nt -menu.language = Spr\u00e5k start. - -startup.welcometo = V\u00e4lkommen till -startup.selectopen = Klicka p\u00e5 ikonen \u00d6ppna p\u00e5 den \u00f6vre panelen eller dra SWF-filen till f\u00f6nstret f\u00f6r att starta. - -error.font.nocharacter = Vald teckensnitt-k\u00e4lla inneh\u00e5ller inte bokstav "%char%". - -warning.initializers = Statiska f\u00e4lt och consts initieras i initierare ofta.\nRedigera v\u00e4rdet h\u00e4r \u00e4r oftast inte tillr\u00e4ckligt! - -#after version 1.7.0u1: - -menu.tools.searchMemory = S\u00f6k efter SWFs i minnet -menu.file.reload = Ladda om -message.confirm.reload = Denna \u00e5tg\u00e4rd avbryter alla \u00e4ndringar som inte sparats och laddar om SWF filen igen.\nVill du forts\u00e4tta? - -dialog.selectbkcolor.title = V\u00e4lj bakgrundsf\u00e4rg f\u00f6r SWF display -button.selectbkcolor.hint = V\u00e4lj bakgrundsf\u00e4rg - -ColorChooser.okText = Acceptera -ColorChooser.cancelText = Avbryt -ColorChooser.resetText = \u00c5terst\u00e4ll -ColorChooser.previewText = F\u00f6rhandsvisning -ColorChooser.swatchesNameText = F\u00e4rgrutor -ColorChooser.swatchesRecentText = Nyligen: -ColorChooser.sampleText=Exempel Text Exempel Text - -#after version 1.7.1: - -preview.play = Spela -preview.pause = Pausa -preview.stop = Stoppa - -message.confirm.removemultiple = \u00c4r du s\u00e4ker p\u00e5 att du vill ta bort %count% objekt\noch alla andra objekt som \u00e4r beroende av objektet? - -menu.tools.searchCache = S\u00f6k i webbl\u00e4sarens cache - -#after version 1.7.2u2 - -error.trait.exists = Egenskap med namnet "%name%" finns redan. -button.addtrait = L\u00e4gg till egenskap -button.font.embed = Inb\u00e4dda... -button.yes.all = Ja till alla -button.no.all = Nej till alla -message.font.add.exists = Tecken %char% finns redan i typsnitts tag:en.\nVill du ers\u00e4tta den? - -filter.gfx = ScaleForm GFx filer (*.gfx) -filter.supported = Alla filtyper som st\u00f6ds -work.canceled = Avbruten -work.restoringControlFlow = \u00c5terst\u00e4llande fl\u00f6deskontroll -menu.advancedsettings.advancedsettings = Avancerade Inst\u00e4llningar -menu.recentFiles = Senaste Filerna - -#after version 1.7.4 -work.restoringControlFlow.complete = Reglerings fl\u00f6de \u00e5terst\u00e4llt -message.confirm.recentFileNotFound = Filen hittades inte. Vill du ta bort den fr\u00e5n senaste filer? -contextmenu.closeSwf = St\u00e4ng SWF -menu.settings.autoRenameIdentifiers = byt namn Automatisk p\u00e5 identifierare -menu.file.saveasexe = Spara som Exe... -filter.exe = K\u00f6rbara filer (*.exe) - -#after version 1.8.0 -font.updateTexts = Uppdatera texter - -#after version 1.8.0u1 -menu.file.close = St\u00e4ng -menu.file.closeAll = St\u00e4ng alla -menu.tools.otherTools = Annat -menu.tools.otherTools.clearRecentFiles = Rensa senaste filer -fontName.name = Typsnitt visningsnamn: -fontName.copyright = Typsnitt Upphovsr\u00e4tt: -button.preview = F\u00f6rhandsgranska -button.reset = \u00c5terst\u00e4ll -errors.info = Det \u00e4r information i loggen. Klicka f\u00f6r att visa. -errors.warning = Det \u00e4r varningar i loggen. Klicka f\u00f6r att visa.. - -decompilationError = Dekompilering felmeddelande - -disassemblingProgress.toString = toString -disassemblingProgress.reading = L\u00e4ser -disassemblingProgress.deobfuscating = Deobfuskering - -contextmenu.moveTag = Flytta tag till - -filter.swc = SWC komponent filer (*.swc) -filter.zip = ZIP komprimerade filer (*.zip) -filter.binary = Bin\u00e4r s\u00f6kning - alla filer (*.*) - -open.error = Fel -open.error.fileNotFound = Filen hittades inte -open.error.cannotOpen = Kan inte \u00f6ppna filen - -node.others = andra - -#after version 1.8.1 -menu.tools.search = Text S\u00f6kning - -#after version 1.8.1u1 -menu.tools.timeline = Tidslinje - -dialog.selectcolor.title = V\u00e4lj f\u00e4rg -button.selectcolor.hint = Klicka f\u00f6r att v\u00e4lja f\u00e4rg - -#default item name, will be used in following sentences -generictag.array.item = artikel -generictag.array.insertbeginning = Infoga %item% vid b\u00f6rjan -generictag.array.insertbefore = Infoga %item% f\u00f6re -generictag.array.remove = Tabort %item% -generictag.array.insertafter = Infoga %item% efter -generictag.array.insertend = Infoga %item% vid slutet - -#after version 2.0.0 -contextmenu.expandAll = Expandera alla -binaryData.truncateWarning = %count% bytes truncated. -filter.sounds = St\u00f6djande ljudformat (*.wav, *.mp3) -filter.sounds.wav = Wave filformat (*.wav) -filter.sounds.mp3 = MP3 komprimerat format (*.mp3) - -error.sound.invalid = Ogiltigt ljud. - -button.prev = F\u00f6reg\u00e5ende -button.next = N\u00e4sta - -#after version 2.1.0 -message.action.playerglobal.title = PlayerGlobal bibliotek beh\u00f6vs -message.action.playerglobal.needed = F\u00f6r ActionScript 3 direkt redigering, beh\u00f6vs ett bibliotek som kallas "PlayerGlobal.swc" det beh\u00f6vs laddas ned fr\u00e5n Adobe's hemsida.\r\n%adobehomepage%\r\nKlicka p\u00e5 okej f\u00f6r att g\u00e5 till nerladdningssidan. -message.action.playerglobal.place = Ladda ned biblioteket som kallas PlayerGlobal(.swc), och placera det i katalogen\r\n%libpath%\r\n Klica okej f\u00f6r att forts\u00e4tta. - -message.confirm.experimental.function = Denna funktion \u00e4r experimenterande. Det menas att du inte ska lita p\u00e5 resultaten och SWF-filen kan bli ej fungerande efter sparning. -message.confirm.donotshowagain = Visa inte igen - -menu.import = Importera -menu.file.import.text = Importera text -import.select.directory = V\u00e4lj kategori som du vill importera -error.text.import = Fel uppstod under text importering. Vill du forts\u00e4tta? - -#after version 2.1.1 -contextmenu.removeWithDependencies = Bort med beroenden - -abc.action.find-usages = Hitta anv\u00e4ndningar -abc.action.find-declaration = Hitta f\u00f6rklaring - -contextmenu.rawEdit = Raw \u00e4ndring -contextmenu.jumpToCharacter = Hoppa till tecken - -menu.settings.dumpView = Dump vy - -menu.view = Vy -menu.file.view.resources = Resurser -menu.file.view.hex = Hex dumpning - -node.header = header - -header.signature = Signature: -header.compression = Kompression: -header.compression.lzma = LZMA -header.compression.zlib = ZLIB -header.compression.none = Ingen kompression -header.version = SWF Version: -header.gfx = GFX: -header.filesize = Fil storlek: -header.framerate = Ram hastighet: -header.framecount = Ram r\u00e4knare: -header.displayrect = Visa rect: -header.displayrect.value.twips = %xmin%,%ymin% = > %xmax%,%ymax% twips -header.displayrect.value.pixels = %xmin%,%ymin% = > %xmax%,%ymax% pixlar - -#after version 2.1.2 -contextmenu.saveToFile = Spara till Fil -contextmenu.parseActions = Parse actions -contextmenu.parseABC = Parse ABC -contextmenu.parseInstructions = Parse AVM2 Instruktioner - -#after version 2.1.3 -menu.deobfuscation = AS1/2 Deobfuskering -menu.file.deobfuscation.old = Gammal stil -menu.file.deobfuscation.new = Ny stil - -#after version 2.1.4 -contextmenu.openswfinside = \u00d6ppna SWF inuti -binarydata.swfInside = Det ser ut som om det \u00e4r en SWF inuti denna bin\u00e4ra data tagg. Klicka h\u00e4r f\u00f6r att ladda det som subtree. - -#after version 3.0.0 -button.zoomin.hint = Zooma in -button.zoomout.hint = Zooma ut -button.zoomfit.hint = Zooma f\u00f6r att passa -button.zoomnone.hint = Zooma till 1:1 -button.snapshot.hint = Ta snapshot intill clipboard - -editorTruncateWarning = Text trunkerad vid position %chars% i debugg mode. - -#Font name which is presented in the SWF Font tag -font.name.intag = Typsnittsnamn i tagg: - -menu.debugger = Debugger -menu.debugger.switch = Debugger -menu.debugger.replacetrace = Ers\u00e4tt sp\u00e5rsamtal -menu.debugger.showlog = Visa Logg - -message.debugger = Denna SWF Debugger kan bara anv\u00e4ndas till att skriva ut meddelanden till logg f\u00f6nstret, webbl\u00e4sare konsol eller larm. Den \u00e4r INTE designad f\u00f6r egenskaper som step code, breakpoints och s\u00e5 vidare. - -contextmenu.addTag = L\u00e4gg till tagg - -deobfuscation.comment.tryenable = Tips: Du kan testa att aktivera "Automatisk deobfuskering" i Inst\u00e4llningar -deobfuscation.comment.failed = Deobfuskering \u00e4r aktiverad men dekompileringen slutf\u00f6rdes inte. Om filen INTE \u00e4r obfuskerad, inaktivera "Automatisk Deobfuskering" f\u00f6r ett b\u00e4ttre resultat. - -#after version 4.0.2 -preview.nextframe = N\u00e4sta ram -preview.prevframe = F\u00f6reg\u00e5ende ram -preview.gotoframe = G\u00e5 till ram... - -preview.gotoframe.dialog.title = G\u00e5 till ram -preview.gotoframe.dialog.message = Skriv in ram nummer (%min% - %max%) -preview.gotoframe.dialog.frame.error = Ogiltigt ram nummer. Det m\u00e5ste vara ett nummer mellan %min% och %max%. - -error.text.invalid.continue = Ogiltig text: %text% p\u00e5 rad %line%. Vill du forts\u00e4tta? - -#after version 4.0.5 -contextmenu.copyTag = Kopiera tagg till -fit = passa -button.setAdvanceValues = S\u00e4tt avancerade v\u00e4rden - -menu.tools.replace = Ers\u00e4tt text - -message.confirm.close = Det finns osparade f\u00f6r\u00e4ndringar. Vill du verkligen st\u00e4nga {swfName}? -message.confirm.closeAll = Det finns osparade f\u00f6r\u00e4ndringar. Vill du verkligen st\u00e4nga alla SWFs? - -contextmenu.exportJavaSource = Exportera Java K\u00e4lla -contextmenu.exportSwfXml = Exportera SWF som XML -contextmenu.importSwfXml = Importera SWF XML - -filter.xml = XML - -#after version 4.1.0 -contextmenu.undo = \u00c5ngra - -text.align.left = V\u00e4nster justering -text.align.right = H\u00f6ger justering -text.align.center = Mitt justering -text.align.justify = R\u00e4ttf\u00e4rdiga justering - -text.undo = \u00c5ngra f\u00f6r\u00e4ndringar - -menu.file.import.xml = Importera SWF XML -menu.file.export.xml = Exportera SWF XML - -#after version 4.1.1 -text.align.translatex.decrease = Minska TranslateX -text.align.translatex.increase = \u00d6ka TranslateX -selectPreviousTag = V\u00e4lj f\u00f6reg\u00e5ende tagg -selectNextTag = V\u00e4lj n\u00e4sta tagg -button.ignoreAll = Ignorera Allt -menu.file.import.symbolClass = Symbol Klass -text.toggleCase = S\u00e4tter p\u00e5 eller st\u00e4nger av fallet - -#after version 5.0.2 -preview.loop = Repetera -menu.file.import.script = Importera skript -contextmenu.copyTagWithDependencies = Kopiera tag med beroenden till -button.replaceWithTag = Ers\u00e4tt med andra tecken tag -button.resolveConstants = L\u00f6sa constants - -#after version 5.1.0 -button.viewConstants = Granska Constants -work.exported = Exporterad -button.replaceAlphaChannel = Ers\u00e4tt alfakanal... - -tagInfo.header.name = Namn -tagInfo.header.value = V\u00e4rde -tagInfo.tagType = Tag Typ -tagInfo.characterId = Tecken Id -tagInfo.offset = Offset -tagInfo.length = L\u00e4ngd -tagInfo.bounds = Gr\u00e4nser -tagInfo.width = Bredd -tagInfo.height = H\u00f6jd -tagInfo.neededCharacters = Beh\u00f6vande Tecken - -button.viewhexpcode = Granska Hex med instruktioner -taginfo.header = Grundl\u00e4ggande tag information - -tagInfo.dependentCharacters = Beroende Tecken - -#after version 5.3.0 -header.uncompressed = Okomprimerad -header.warning.unsupportedGfxCompression = GFX st\u00f6der endast okomprimerat eller Zlib komprimerad inneh\u00e5ll. -header.warning.minimumZlibVersion = Zlib kompression beh\u00f6ver SWF version 6 eller st\u00f6rre. -header.warning.minimumLzmaVersion = LZMA kompression beh\u00f6ver SWF version 13 eller st\u00f6rre. - -filter.dmg = Mac K\u00f6rbara filer (*.dmg) -filter.linuxExe = Linux K\u00f6rbara filer +# Copyright (C) 2010-2015 JPEXS +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +menu.file = Fil +menu.file.open = \u00d6ppna... +menu.file.save = Spara +menu.file.saveas = Spara som... +menu.file.export.fla = Exportera till FLA +menu.file.export.all = Exportera alla delar +menu.file.export.selection = Exportera markering +menu.file.exit = St\u00e4ng + +menu.tools = Verktyg +menu.tools.searchas = S\u00f6k igenom alla ActionSkript... +menu.tools.proxy = Proxy +menu.tools.deobfuscation = Avl\u00e4gsna obfuskering +menu.tools.deobfuscation.pcode = Avl\u00e4gsna obfuskerad Bytekod... +menu.tools.deobfuscation.globalrename = Byt namn p\u00e5 global identifierare +menu.tools.deobfuscation.renameinvalid = Byt namn p\u00e5 felaktiga identifierare +menu.tools.gotoDocumentClass = G\u00e5 till dokumentklass + +menu.settings = Inst\u00e4llningar +menu.settings.autodeobfuscation = Automatiskt avl\u00e4gsning av obfuskering +menu.settings.internalflashviewer = Anv\u00e4nd egen Flash-spelare +menu.settings.parallelspeedup = Parallell uppsnabbning +menu.settings.disabledecompilation = Inaktivera dekompilering (Demontera endast) +menu.settings.addtocontextmenu = L\u00e4gg till FFDec till SWF-filernas snabbmeny +menu.settings.language = Byt spr\u00e5k +menu.settings.cacheOnDisk = Anv\u00e4nd cachelagring p\u00e5 h\u00e5rddisken +menu.settings.gotoMainClassOnStartup = Markera dokumentklass vid uppstart + +menu.help = Hj\u00e4lp +menu.help.checkupdates = Leta efter uppdateringar... +menu.help.helpus = Hj\u00e4lp oss! +menu.help.homepage = Bes\u00f6k hemsidan +menu.help.about = Om... + +contextmenu.remove = Ta bort + +button.save = Spara +button.edit = \u00c4ndra +button.cancel = \u00c5ngra +button.replace = Ers\u00e4tt... + +notavailonthisplatform = F\u00f6rhandsgranskning av detta objekt \u00e4r inte tillg\u00e4nglig p\u00e5 denna plattform. (Windows bara) + +swfpreview = SWF f\u00f6rhandsvisning +swfpreview.internal = SWF f\u00f6rhandsvisning (Intern f\u00f6rhandsvisning) + +parameters = Parametrar + +rename.enternew = Ange det nya namnet: + +rename.finished.identifier = Identifierare omd\u00f6pt. +rename.finished.multiname = %count% multiname har blivit omd\u00f6pt(a). + +node.texts = texter +node.images = bilder +node.movies = filmer +node.sounds = ljud +node.binaryData = bin\u00e4rData +node.fonts = teckensnitt +node.sprites = sprites +node.shapes = former +node.morphshapes = morphform +node.buttons = knappar +node.frames = ramar +node.scripts = skript + +message.warning = Varning +message.confirm.experimental = F\u00f6ljande tillv\u00e4gag\u00e5ngss\u00e4tt kan skada SWF-filen som kan d\u00e4refter bli ospelbar.\r\nANV\u00c4ND DEN P\u00c5 DIN EGEN RISK. Vill du forts\u00e4tta? +message.confirm.parallel = Parallellitet kan snabba upp laddning och dekompilering, men anv\u00e4nda mera minne. +message.confirm.on = Vill du aktivera detta? +message.confirm.off = Vill du avaktivera detta? +message.confirm = Bekr\u00e4fta + +message.confirm.autodeobfuscate = Automatiskt avl\u00e4gsning av obfuskering \u00e4r ett s\u00e4tt till att dekompilera obfuskerad kod.\r\nAvl\u00e4gsna obfuskerad kod leder till sl\u00f6are dekompilering och n\u00e5gon d\u00f6d kod kan bli borttagen..\r\nOm koden inte \u00e4r obfuskerad, s\u00e5 \u00e4r det b\u00e4ttre att st\u00e4nga av automatisk borttagning av obfuskering. + +message.parallel = parallellitet +message.trait.saved = Egenskap har sparats + +message.constant.new.string = Str\u00e4ng "%value%" finns inte i konstant tabellen. Vill du l\u00e4gga till det? +message.constant.new.string.title = L\u00e4gg till Str\u00e4ng +message.constant.new.integer = Heltal v\u00e4rde "%value%" finns inte i konstant tabellen. Vill du l\u00e4gga till det? +message.constant.new.integer.title = L\u00e4gg till Heltal +message.constant.new.unsignedinteger = Osignerat heltal v\u00e4rde "%value%" finns inte i konstant tabellen. Vill du l\u00e4gga till det? +message.constant.new.unsignedinteger.title = L\u00e4gg till Osignerat heltal +message.constant.new.double = Dubbelt v\u00e4rde "%value%" finns inte i konstant tabellen. Vill du l\u00e4gga till det? +message.constant.new.double.title = L\u00e4gg till Dubbel + +work.buffering = Buffrar +work.waitingfordissasembly = V\u00e4ntar p\u00e5 demontering +work.gettinghilights = Getting hilights +work.disassembling = Demonterar +work.exporting = Exporterar +work.searching = S\u00f6ker +work.renaming = \u00c4ndrar namn +work.exporting.fla = Exporterar FLA +work.renaming.identifiers = \u00c4ndrar namn p\u00e5 identifierare +work.deobfuscating = Avl\u00e4gsning utav obfuskering +work.decompiling = Dekompilering +work.gettingvariables = Tar variablar +work.reading.swf = L\u00e4ser SWF +work.creatingwindow = Skapar f\u00f6nster +work.buildingscripttree = Bygger skript tr\u00e4 + +work.deobfuscating.complete = Avl\u00e4gsning utav obfuskering \u00e4r nu f\u00e4rdig + +message.search.notfound = Str\u00e4ng "%searchtext%" hittades inte. +message.search.notfound.title = Hittades inte + +message.rename.notfound.multiname = Ingen multiname hittades under mark\u00f6ren +message.rename.notfound.identifier = ingen identifiering hittades under mark\u00f6ren +message.rename.notfound.title = Hittades inte +message.rename.renamed = Identifierare som har \u00e4ndrat namn: %count% + +filter.images = Bilder (*.jpg,*.gif,*.png,*.bmp) +filter.fla = %version% Dokument (*.fla) +filter.xfl = %version% Okomprimerat Dokument (*.xfl) +filter.swf = SWF filer (*.swf) + +error = Fel +error.image.invalid = Ogiltig bild. + +error.text.invalid = Ogiltig text: %text% p\u00e5 rad %line% +error.file.save = Kan inte spara filen +error.file.write = Kan inte skriva till filen +error.export = Fel under loppet av exporteringen + +export.select.directory = V\u00e4lj s\u00f6kv\u00e4g till katalog att exportera +export.finishedin = Exporterades i %time% + +update.check.title = Uppdaterings koll +update.check.nonewversion = Ingen ny version finns tillg\u00e4nglig. + +message.helpus = V\u00e4nligen bes\u00f6k\r\n%url%\r\nf\u00f6r mer detaljer. +message.homepage = Bes\u00f6k hemsidan: \r\n%url% + +proxy = Proxy +proxy.start = Starta proxy +proxy.stop = Stoppa proxy +proxy.show = Visa proxy +exit = St\u00e4ng + +panel.disassembled = P-code k\u00e4llkod +panel.decompiled = ActionSkript k\u00e4llkod + +search.info = S\u00f6k efter "%text%" : +search.script = Skript + +constants = Konstanter +traits = Egenskaper + +pleasewait = V\u00e4nligen v\u00e4nta + +abc.detail.methodtrait = Metod/F\u00e5ngare/Egenskap s\u00e4ttare +abc.detail.unsupported = - +abc.detail.slotconsttrait = Slot/Const Egenskap +abc.detail.traitname = Namn: + +abc.detail.body.params.maxstack = Maximal stapling: +abc.detail.body.params.localregcount = Lokala register r\u00e4knade: +abc.detail.body.params.minscope = Minsta omfattnings djup: +abc.detail.body.params.maxscope = Maximal omfattnings djup: +abc.detail.body.params.autofill = Automatisk utfyllnad n\u00e4r koden sparas (GLOBAL INST\u00c4LLNING) +abc.detail.body.params.autofill.experimental = ...EXPERIMENTELL + +abc.detail.methodinfo.methodindex = Metod register: +abc.detail.methodinfo.parameters = Parametrar: +abc.detail.methodinfo.returnvalue = \u00c5terl\u00e4mna v\u00e4rde: + +error.methodinfo.params = MetodInfo Parameter fel +error.methodinfo.returnvalue = MetodInfo \u00e5terl\u00e4mmnings typ Fel + +abc.detail.methodinfo = MetodInfo +abc.detail.body.code = MetodInfo Kod +abc.detail.body.params = MetodKropp parametrar + +abc.detail.slotconst.typevalue = Typ och V\u00e4rde: + +error.slotconst.typevalue = SlotConst typv\u00e4rde felaktighet + +message.autofill.failed = Kan inte f\u00e5 statistik koden f\u00f6r automatisk kropps-parametrar.\r\nAvmarkera automatisk ifyllnad f\u00f6r att undvika det h\u00e4r meddelandet. +info.selecttrait = V\u00e4lj klass och klicka p\u00e5 en egenskap i Actionskript k\u00e4llan f\u00f6r att redigera den. + +button.viewgraph = Visa Diagram +button.viewhex = Visa Hex + +abc.traitslist.instanceinitializer = instans initierare +abc.traitslist.classinitializer = klass initierare + +action.edit.experimental = (experimentellt) + +message.action.saved = Koden har sparats + +error.action.save = %error% p\u00e5 rad %line% + +message.confirm.remove = \u00c4r du s\u00e4ker p\u00e5 att du vill ta bort %item% \n och alla objekt som \u00e4r beroende av den? + +#after version 1.6.5u1: + +button.ok = Godk\u00e4nn +button.cancel = Avbryt + +font.name = Typsnitts namn: +font.isbold = \u00c4r fet: +font.isitalic = \u00c4r kursiv: +font.ascent = Stigande: +font.descent = Nedstigande: +font.leading = Ledande: +font.characters = Bokst\u00e4ver: +font.characters.add = L\u00e4gg till bokst\u00e4ver: +value.unknown = ? + +yes = ja +no = nej + +errors.present = Det finns FEL i loggen. Klicka f\u00f6r att visa loggen. +errors.none = Det finns inga fel i loggen + +#after version 1.6.6: + +dialog.message.title = Meddelande +dialog.select.title = V\u00e4lj ett alternativ + +button.yes = Ja +button.no = Nej + +FileChooser.openButtonText = \u00d6ppna +FileChooser.openButtonToolTipText = \u00d6ppna +FileChooser.lookInLabelText = Alla Filer +FileChooser.acceptAllFileFilterText = Kolla i: +FileChooser.filesOfTypeLabelText = Filformat: +FileChooser.fileNameLabelText = Filnamn: +FileChooser.listViewButtonToolTipText = Lista +FileChooser.listViewButtonAccessibleName = Lista +FileChooser.detailsViewButtonToolTipText = Detaljer +FileChooser.detailsViewButtonAccessibleName = Detaljer +FileChooser.upFolderToolTipText = Upp en niv\u00e5 +FileChooser.upFolderAccessibleName = Upp en niv\u00e5 +FileChooser.homeFolderToolTipText = Hem +FileChooser.homeFolderAccessibleName = Hem +FileChooser.fileNameHeaderText = Namn +FileChooser.fileSizeHeaderText = Storlek +FileChooser.fileTypeHeaderText = Typ +FileChooser.fileDateHeaderText = Datum +FileChooser.fileAttrHeaderText = Egenskaper +FileChooser.openDialogTitleText = \u00d6ppna +FileChooser.directoryDescriptionText = Katalog +FileChooser.directoryOpenButtonText = \u00d6ppna +FileChooser.directoryOpenButtonToolTipText = \u00d6ppna vald katalog +FileChooser.fileDescriptionText = Generic File +FileChooser.helpButtonText = Hj\u00e4lp +FileChooser.helpButtonToolTipText = FileChooser help +FileChooser.newFolderAccessibleName = Ny mapp +FileChooser.newFolderErrorText = N\u00e5got gick fel n\u00e4r den f\u00f6rs\u00f6kta skapa en ny mapp +FileChooser.newFolderToolTipText = Skapa ny mapp +FileChooser.other.newFolder = NyMapp +FileChooser.other.newFolder.subsequent = NyMapp.{0} +FileChooser.win32.newFolder = Ny mapp +FileChooser.win32.newFolder.subsequent = Ny mapp ({0}) +FileChooser.saveButtonText = Spara +FileChooser.saveButtonToolTipText = Spara vald fil +FileChooser.saveDialogTitleText = Spara +FileChooser.saveInLabelText = Spara i: +FileChooser.updateButtonText = Uppdatera +FileChooser.updateButtonToolTipText = Uppdatera kataloglistning + +#after version 1.6.6u2: + +FileChooser.detailsViewActionLabel.textAndMnemonic = Detaljer +FileChooser.detailsViewButtonToolTip.textAndMnemonic = Detaljer +FileChooser.fileAttrHeader.textAndMnemonic = Egenskaper +FileChooser.fileDateHeader.textAndMnemonic = Modifierad +FileChooser.fileNameHeader.textAndMnemonic = Namn +FileChooser.fileNameLabel.textAndMnemonic = Filnamn: +FileChooser.fileSizeHeader.textAndMnemonic = Storlek +FileChooser.fileTypeHeader.textAndMnemonic = Typ +FileChooser.filesOfTypeLabel.textAndMnemonic = Filformat: +FileChooser.folderNameLabel.textAndMnemonic = Mappnamn: +FileChooser.homeFolderToolTip.textAndMnemonic = Hem +FileChooser.listViewActionLabel.textAndMnemonic = Lista +FileChooser.listViewButtonToolTip.textAndMnemonic = Lista +FileChooser.lookInLabel.textAndMnemonic = Kolla i: +FileChooser.newFolderActionLabel.textAndMnemonic = Ny mapp +FileChooser.newFolderToolTip.textAndMnemonic = Skapa Ny Mapp +FileChooser.refreshActionLabel.textAndMnemonic = Refresh +FileChooser.saveInLabel.textAndMnemonic = Spara i: +FileChooser.upFolderToolTip.textAndMnemonic = Upp en niv\u00e5 +FileChooser.viewMenuButtonAccessibleName = Visa meny +FileChooser.viewMenuButtonToolTipText = Visa meny +FileChooser.viewMenuLabel.textAndMnemonic = Visa +FileChooser.newFolderActionLabelText = Ny mapp +FileChooser.listViewActionLabelText = Lista +FileChooser.detailsViewActionLabelText = Detaljer +FileChooser.refreshActionLabelText = Uppdatera +FileChooser.sortMenuLabelText = Ordna ikoner efter +FileChooser.viewMenuLabelText = Visa +FileChooser.fileSizeKiloBytes = {0} KB +FileChooser.fileSizeMegaBytes = {0} MB +FileChooser.fileSizeGigaBytes = {0} GB +FileChooser.folderNameLabelText = Mappnamn: + +error.occured = Ett fel uppstod : %error% +button.abort = Avbryt +button.retry = F\u00f6rs\u00f6k igen +button.ignore = Ignorera + +font.source = Typsnitts k\u00e4lla: + +#after version 1.6.7: + +menu.export = Exportera +menu.general = Allm\u00e4nt +menu.language = Spr\u00e5k start. + +startup.welcometo = V\u00e4lkommen till +startup.selectopen = Klicka p\u00e5 ikonen \u00d6ppna p\u00e5 den \u00f6vre panelen eller dra SWF-filen till f\u00f6nstret f\u00f6r att starta. + +error.font.nocharacter = Vald teckensnitt-k\u00e4lla inneh\u00e5ller inte bokstav "%char%". + +warning.initializers = Statiska f\u00e4lt och consts initieras i initierare ofta.\nRedigera v\u00e4rdet h\u00e4r \u00e4r oftast inte tillr\u00e4ckligt! + +#after version 1.7.0u1: + +menu.tools.searchMemory = S\u00f6k efter SWFs i minnet +menu.file.reload = Ladda om +message.confirm.reload = Denna \u00e5tg\u00e4rd avbryter alla \u00e4ndringar som inte sparats och laddar om SWF filen igen.\nVill du forts\u00e4tta? + +dialog.selectbkcolor.title = V\u00e4lj bakgrundsf\u00e4rg f\u00f6r SWF display +button.selectbkcolor.hint = V\u00e4lj bakgrundsf\u00e4rg + +ColorChooser.okText = Acceptera +ColorChooser.cancelText = Avbryt +ColorChooser.resetText = \u00c5terst\u00e4ll +ColorChooser.previewText = F\u00f6rhandsvisning +ColorChooser.swatchesNameText = F\u00e4rgrutor +ColorChooser.swatchesRecentText = Nyligen: +ColorChooser.sampleText=Exempel Text Exempel Text + +#after version 1.7.1: + +preview.play = Spela +preview.pause = Pausa +preview.stop = Stoppa + +message.confirm.removemultiple = \u00c4r du s\u00e4ker p\u00e5 att du vill ta bort %count% objekt\noch alla andra objekt som \u00e4r beroende av objektet? + +menu.tools.searchCache = S\u00f6k i webbl\u00e4sarens cache + +#after version 1.7.2u2 + +error.trait.exists = Egenskap med namnet "%name%" finns redan. +button.addtrait = L\u00e4gg till egenskap +button.font.embed = Inb\u00e4dda... +button.yes.all = Ja till alla +button.no.all = Nej till alla +message.font.add.exists = Tecken %char% finns redan i typsnitts tag:en.\nVill du ers\u00e4tta den? + +filter.gfx = ScaleForm GFx filer (*.gfx) +filter.supported = Alla filtyper som st\u00f6ds +work.canceled = Avbruten +work.restoringControlFlow = \u00c5terst\u00e4llande fl\u00f6deskontroll +menu.advancedsettings.advancedsettings = Avancerade Inst\u00e4llningar +menu.recentFiles = Senaste Filerna + +#after version 1.7.4 +work.restoringControlFlow.complete = Reglerings fl\u00f6de \u00e5terst\u00e4llt +message.confirm.recentFileNotFound = Filen hittades inte. Vill du ta bort den fr\u00e5n senaste filer? +contextmenu.closeSwf = St\u00e4ng SWF +menu.settings.autoRenameIdentifiers = byt namn Automatisk p\u00e5 identifierare +menu.file.saveasexe = Spara som Exe... +filter.exe = K\u00f6rbara filer (*.exe) + +#after version 1.8.0 +font.updateTexts = Uppdatera texter + +#after version 1.8.0u1 +menu.file.close = St\u00e4ng +menu.file.closeAll = St\u00e4ng alla +menu.tools.otherTools = Annat +menu.tools.otherTools.clearRecentFiles = Rensa senaste filer +fontName.name = Typsnitt visningsnamn: +fontName.copyright = Typsnitt Upphovsr\u00e4tt: +button.preview = F\u00f6rhandsgranska +button.reset = \u00c5terst\u00e4ll +errors.info = Det \u00e4r information i loggen. Klicka f\u00f6r att visa. +errors.warning = Det \u00e4r varningar i loggen. Klicka f\u00f6r att visa.. + +decompilationError = Dekompilering felmeddelande + +disassemblingProgress.toString = toString +disassemblingProgress.reading = L\u00e4ser +disassemblingProgress.deobfuscating = Deobfuskering + +contextmenu.moveTag = Flytta tag till + +filter.swc = SWC komponent filer (*.swc) +filter.zip = ZIP komprimerade filer (*.zip) +filter.binary = Bin\u00e4r s\u00f6kning - alla filer (*.*) + +open.error = Fel +open.error.fileNotFound = Filen hittades inte +open.error.cannotOpen = Kan inte \u00f6ppna filen + +node.others = andra + +#after version 1.8.1 +menu.tools.search = Text S\u00f6kning + +#after version 1.8.1u1 +menu.tools.timeline = Tidslinje + +dialog.selectcolor.title = V\u00e4lj f\u00e4rg +button.selectcolor.hint = Klicka f\u00f6r att v\u00e4lja f\u00e4rg + +#default item name, will be used in following sentences +generictag.array.item = artikel +generictag.array.insertbeginning = Infoga %item% vid b\u00f6rjan +generictag.array.insertbefore = Infoga %item% f\u00f6re +generictag.array.remove = Tabort %item% +generictag.array.insertafter = Infoga %item% efter +generictag.array.insertend = Infoga %item% vid slutet + +#after version 2.0.0 +contextmenu.expandAll = Expandera alla +binaryData.truncateWarning = %count% bytes truncated. +filter.sounds = St\u00f6djande ljudformat (*.wav, *.mp3) +filter.sounds.wav = Wave filformat (*.wav) +filter.sounds.mp3 = MP3 komprimerat format (*.mp3) + +error.sound.invalid = Ogiltigt ljud. + +button.prev = F\u00f6reg\u00e5ende +button.next = N\u00e4sta + +#after version 2.1.0 +message.action.playerglobal.title = PlayerGlobal bibliotek beh\u00f6vs +message.action.playerglobal.needed = F\u00f6r ActionScript 3 direkt redigering, beh\u00f6vs ett bibliotek som kallas "PlayerGlobal.swc" det beh\u00f6vs laddas ned fr\u00e5n Adobe's hemsida.\r\n%adobehomepage%\r\nKlicka p\u00e5 okej f\u00f6r att g\u00e5 till nerladdningssidan. +message.action.playerglobal.place = Ladda ned biblioteket som kallas PlayerGlobal(.swc), och placera det i katalogen\r\n%libpath%\r\n Klica okej f\u00f6r att forts\u00e4tta. + +message.confirm.experimental.function = Denna funktion \u00e4r experimenterande. Det menas att du inte ska lita p\u00e5 resultaten och SWF-filen kan bli ej fungerande efter sparning. +message.confirm.donotshowagain = Visa inte igen + +menu.import = Importera +menu.file.import.text = Importera text +import.select.directory = V\u00e4lj kategori som du vill importera +error.text.import = Fel uppstod under text importering. Vill du forts\u00e4tta? + +#after version 2.1.1 +contextmenu.removeWithDependencies = Bort med beroenden + +abc.action.find-usages = Hitta anv\u00e4ndningar +abc.action.find-declaration = Hitta f\u00f6rklaring + +contextmenu.rawEdit = Raw \u00e4ndring +contextmenu.jumpToCharacter = Hoppa till tecken + +menu.settings.dumpView = Dump vy + +menu.view = Vy +menu.file.view.resources = Resurser +menu.file.view.hex = Hex dumpning + +node.header = header + +header.signature = Signature: +header.compression = Kompression: +header.compression.lzma = LZMA +header.compression.zlib = ZLIB +header.compression.none = Ingen kompression +header.version = SWF Version: +header.gfx = GFX: +header.filesize = Fil storlek: +header.framerate = Ram hastighet: +header.framecount = Ram r\u00e4knare: +header.displayrect = Visa rect: +header.displayrect.value.twips = %xmin%,%ymin% = > %xmax%,%ymax% twips +header.displayrect.value.pixels = %xmin%,%ymin% = > %xmax%,%ymax% pixlar + +#after version 2.1.2 +contextmenu.saveToFile = Spara till Fil +contextmenu.parseActions = Parse actions +contextmenu.parseABC = Parse ABC +contextmenu.parseInstructions = Parse AVM2 Instruktioner + +#after version 2.1.3 +menu.deobfuscation = Deobfuskering +menu.file.deobfuscation.old = Gammal stil +menu.file.deobfuscation.new = Ny stil + +#after version 2.1.4 +contextmenu.openswfinside = \u00d6ppna SWF inuti +binarydata.swfInside = Det ser ut som om det \u00e4r en SWF inuti denna bin\u00e4ra data tagg. Klicka h\u00e4r f\u00f6r att ladda det som subtree. + +#after version 3.0.0 +button.zoomin.hint = Zooma in +button.zoomout.hint = Zooma ut +button.zoomfit.hint = Zooma f\u00f6r att passa +button.zoomnone.hint = Zooma till 1:1 +button.snapshot.hint = Ta snapshot intill clipboard + +editorTruncateWarning = Text trunkerad vid position %chars% i debugg mode. + +#Font name which is presented in the SWF Font tag +font.name.intag = Typsnittsnamn i tagg: + +menu.debugger = Debugger +menu.debugger.switch = Debugger +menu.debugger.replacetrace = Ers\u00e4tt sp\u00e5rsamtal +menu.debugger.showlog = Visa Logg + +message.debugger = Denna SWF Debugger kan bara anv\u00e4ndas till att skriva ut meddelanden till logg f\u00f6nstret, webbl\u00e4sare konsol eller larm. Den \u00e4r INTE designad f\u00f6r egenskaper som step code, breakpoints och s\u00e5 vidare. + +contextmenu.addTag = L\u00e4gg till tagg + +deobfuscation.comment.tryenable = Tips: Du kan testa att aktivera "Automatisk deobfuskering" i Inst\u00e4llningar +deobfuscation.comment.failed = Deobfuskering \u00e4r aktiverad men dekompileringen slutf\u00f6rdes inte. Om filen INTE \u00e4r obfuskerad, inaktivera "Automatisk Deobfuskering" f\u00f6r ett b\u00e4ttre resultat. + +#after version 4.0.2 +preview.nextframe = N\u00e4sta ram +preview.prevframe = F\u00f6reg\u00e5ende ram +preview.gotoframe = G\u00e5 till ram... + +preview.gotoframe.dialog.title = G\u00e5 till ram +preview.gotoframe.dialog.message = Skriv in ram nummer (%min% - %max%) +preview.gotoframe.dialog.frame.error = Ogiltigt ram nummer. Det m\u00e5ste vara ett nummer mellan %min% och %max%. + +error.text.invalid.continue = Ogiltig text: %text% p\u00e5 rad %line%. Vill du forts\u00e4tta? + +#after version 4.0.5 +contextmenu.copyTag = Kopiera tagg till +fit = passa +button.setAdvanceValues = S\u00e4tt avancerade v\u00e4rden + +menu.tools.replace = Ers\u00e4tt text + +message.confirm.close = Det finns osparade f\u00f6r\u00e4ndringar. Vill du verkligen st\u00e4nga {swfName}? +message.confirm.closeAll = Det finns osparade f\u00f6r\u00e4ndringar. Vill du verkligen st\u00e4nga alla SWFs? + +contextmenu.exportJavaSource = Exportera Java K\u00e4lla +contextmenu.exportSwfXml = Exportera SWF som XML +contextmenu.importSwfXml = Importera SWF XML + +filter.xml = XML + +#after version 4.1.0 +contextmenu.undo = \u00c5ngra + +text.align.left = V\u00e4nster justering +text.align.right = H\u00f6ger justering +text.align.center = Mitt justering +text.align.justify = R\u00e4ttf\u00e4rdiga justering + +text.undo = \u00c5ngra f\u00f6r\u00e4ndringar + +menu.file.import.xml = Importera SWF XML +menu.file.export.xml = Exportera SWF XML + +#after version 4.1.1 +text.align.translatex.decrease = Minska TranslateX +text.align.translatex.increase = \u00d6ka TranslateX +selectPreviousTag = V\u00e4lj f\u00f6reg\u00e5ende tagg +selectNextTag = V\u00e4lj n\u00e4sta tagg +button.ignoreAll = Ignorera Allt +menu.file.import.symbolClass = Symbol Klass +text.toggleCase = S\u00e4tter p\u00e5 eller st\u00e4nger av fallet + +#after version 5.0.2 +preview.loop = Repetera +menu.file.import.script = Importera skript +contextmenu.copyTagWithDependencies = Kopiera tag med beroenden till +button.replaceWithTag = Ers\u00e4tt med andra tecken tag +button.resolveConstants = L\u00f6sa constants + +#after version 5.1.0 +button.viewConstants = Granska Constants +work.exported = Exporterad +button.replaceAlphaChannel = Ers\u00e4tt alfakanal... + +tagInfo.header.name = Namn +tagInfo.header.value = V\u00e4rde +tagInfo.tagType = Tag Typ +tagInfo.characterId = Tecken Id +tagInfo.offset = Offset +tagInfo.length = L\u00e4ngd +tagInfo.bounds = Gr\u00e4nser +tagInfo.width = Bredd +tagInfo.height = H\u00f6jd +tagInfo.neededCharacters = Beh\u00f6vande Tecken + +button.viewhexpcode = Granska Hex med instruktioner +taginfo.header = Grundl\u00e4ggande tag information + +tagInfo.dependentCharacters = Beroende Tecken + +#after version 5.3.0 +header.uncompressed = Okomprimerad +header.warning.unsupportedGfxCompression = GFX st\u00f6der endast okomprimerat eller Zlib komprimerad inneh\u00e5ll. +header.warning.minimumZlibVersion = Zlib kompression beh\u00f6ver SWF version 6 eller st\u00f6rre. +header.warning.minimumLzmaVersion = LZMA kompression beh\u00f6ver SWF version 13 eller st\u00f6rre. + +filter.dmg = Mac K\u00f6rbara filer (*.dmg) +filter.linuxExe = Linux K\u00f6rbara filer diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_zh.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_zh.properties index 62d4741d2..0c79ca224 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_zh.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_zh.properties @@ -488,6 +488,6 @@ contextmenu.parseActions = \u89e3\u6790\u52a8\u4f5c contextmenu.parseABC = \u89e3\u6790ABC contextmenu.parseInstructions = \u89e3\u6790AVM2\u6307\u4ee4 -menu.deobfuscation = AS1/2 \u53cd\u6df7\u6dc6 +menu.deobfuscation = \u53cd\u6df7\u6dc6 menu.file.deobfuscation.old = \u65e7\u6837\u5f0f menu.file.deobfuscation.new = \u65b0\u6837\u5f0f