рдирдорд╕реНрддреЗ, рдореБрдЭреЗ рдЗрд╕ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ troika-worker.utils.esm.js рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реА рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИрдВред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ
рдХреЛрдИ рдЙрдкрд╛рдп?
рд╣рдореНрдо, рд╡рд╣ рдЪреЗрддрд╛рд╡рдиреА рддрдм рддрдХ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рд╣реЛрддреА рдЬрдм рддрдХ рдХрд┐ > 1000 рдЦреБрд▓реЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЕрдиреБрд░реЛрдз рди рд╣реЛрдВред рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╣реИрдВ?
рдореИрдВ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди 1000 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ (рдХрдо рд╕реЗ рдХрдо рдЬрд╛рдирдмреВрдЭрдХрд░ рдирд╣реАрдВ)
рдХреБрдЫ рд╕реМ рдХреА рддрд░рд╣ рдЕрдзрд┐рдХ
рдпрд╣рд╛рдБ рдореИрдВ рдХреНрдпрд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ
рд▓реЗрдХрд┐рди рддреЛ рдЖрдк рдХреНрдпрд╛ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╢рд╛рдпрдж рдореЗрд░реА рддрд░рдл рдПрдХ рдмрдЧ рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд░реВрд░рдд рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реВрдВ рдФрд░ рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВ 1000 рдХреА рдЧрд┐рдирддреА рдкрд╛рд░ рдХрд░ рд▓реЗрддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ?
рдореИрдВ рдРрд╕реЗ рдЙрджрд╛рд╣рд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рдирдореЗрдВ рдХреЛрдИ рд╕рд╛рдордЧреНрд░реА рдирд╣реАрдВ рд╣реИ .visible = false
рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрднреА рднреА рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдореМрдЬреВрдж рд╣реИ
рдХреНрдпрд╛ рдЖрдк рдЕрдкреНрд░рдпреБрдХреНрдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП .visible рдкреНрд░реЛрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░реЗрдВрдЧреЗ?
рдЖрд╣, рдпрд╣ рд╕рдордЭрд╛ рд╕рдХрддрд╛ рд╣реИред .sync() рдкрд░ рдХреЛрдИ рднреА рдХреЙрд▓ рдЕрднреА рднреА рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдЬрд╛рд░реА рдХреА рдЬрд╛рдПрдЧреА, рднрд▓реЗ рд╣реА рджреГрд╢реНрдпрдорд╛рди: рдЧрд▓рдд рд╣реЛ, рдФрд░ рд╡реЗ рдвреЗрд░ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдорд╛рдВрдЧ рдкрд░ рд▓реЗрдмрд▓ рдмрдирд╛рдиреЗ/рдирд┐рдкрдЯрд╛рди рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдиреВрдВрдЧрд╛, рдпрд╛ рдХрдо рд╕реЗ рдХрдо .sync() рдЫрд┐рдкреЗ рд╣реБрдП рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЛ рд░реЛрдХреВрдВрдЧрд╛ред рд╡реЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕рднреА рдПрдХ рд╣реА рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдпрд╣ рдЫрд┐рдкреЗ рд╣реБрдП рд▓реЗрдмрд▓ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╡реНрдпрд╕реНрдд рд╣реИ рддреЛ рдЗрд╕рд╕реЗ рдЖрдкрдХреЗ рджреГрд╢реНрдпрдорд╛рди рд▓реЛрдЧреЛрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рджреЗрд░реА рд╣реЛ рд╕рдХрддреА рд╣реИред
рдореИрдВ рдХреБрдЫ рдзрд╛рд░рдгрд╛рдПрдБ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдБ, рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдкрдХрд╛ рд╕рдЯреАрдХ рд▓реЗрдмрд▓ рд╡реНрдпреВ рдХреЛрдб рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИред рдпрд╣ рдЕрднреА рднреА рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрд▓рдПрдордХреЗ рдЬреЛ рдЖрдкрдХреЛ рдорд┐рд▓ рдЬрд╛рдПред
рдХреЗрд╡рд▓ .sync() рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрдм .visible === true
рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдорд┐рд▓ рд░рд╣реА рд╣реИрдВ
рдЕрдЧрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдореИрдВ рдХреЗрд╡рд▓ рджреГрд╢реНрдпрдорд╛рди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реВрдВ рдФрд░ рдЕрдкреНрд░рдпреБрдХреНрдд рдХреЛ рдирд╖реНрдЯ рдХрд░ рджреЗрддрд╛ рд╣реВрдВ рддреЛ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рджреВрд░ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ
рд╣рдореНрдо, Text
рд╣реА рдХреЗрд╡рд▓ рд╕рд┐рдВрдХ() рдХреЛ onBeforeRender рдореЗрдВ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рджреГрд╢реНрдпрдорд╛рди = рдЧрд▓рдд рд╣реЛрдиреЗ рдкрд░ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХреНрдпрд╛ рдЖрдкрдХрд╛ рд▓реЗрдмрд▓ рд╡реНрдпреВ рд░реИрдкрд░ рдХреЛрдб рдХрд╣реАрдВ рднреА рдЙрдкрд▓рдмреНрдз рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ?
рдпрд╣ рдПрдХ рдмрдВрдж рд╕реНрд░реЛрдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ
рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╡рд░реНрдЧ рд╣реИ, рдЬреЛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
import {Mesh, MeshBasicMaterial} from "three";
import R from "../../../../../../../../../../resources/Namespace";
import BaseView, {ViewType} from "./BaseView";
import {Text} from "troika-three-text";
import {GeometryInstances} from "../instances/GeometryInstances";
import {MaterialInstances} from "../instances/MaterialInstances";
export enum TextAlign {
left = "left",
right = "right",
center = "center",
justify = "justify",
}
export enum HorizontalAlign {
left = "left",
right = "right",
center = "center",
}
export enum VerticalAlign {
top = "top",
topBaseline = "top-baseline",
middle = "middle",
bottomBaseline = "bottom-baseline",
bottom = "bottom",
}
export interface ILabelData {
content: string;
fontFace?: string;
fontSize?: number;
alignment?: TextAlign;
horizontalAlign?: HorizontalAlign;
verticalAlign?: VerticalAlign;
color?: string;
opacity?: number;
backgroundColor?: string;
highlightable: boolean;
}
export default class LabelView extends BaseView {
get viewObject() {
return this._viewObject as any;
}
get content() {
return this.textMesh.text;
}
set content(content: string) {
if (content !== this.textMesh.text) {
this.textMesh.text = content;
this.textMesh.visible = !!content;
this.syncIfVisible();
}
}
private syncIfVisible() {
// Better for perf: https://github.com/protectwise/troika/issues/112
if (this.textMesh?.text && this.textMesh?.visible && this._isVisible) {
this.textMesh.sync();
}
}
set textAlign(alignment: TextAlign) {
this.textMesh.textAlign = alignment;
this.syncIfVisible();
}
set horizontalAlign(alignment: HorizontalAlign) {
this.textMesh.anchorX = alignment;
this.syncIfVisible();
}
set verticalAlign(alignment: VerticalAlign) {
this.textMesh.anchorY = alignment;
this.syncIfVisible();
}
private backgroundMesh: Mesh | undefined;
private readonly textMesh: any;
private readonly foregroundColor: string;
private highlightable: boolean;
constructor(labelData: ILabelData) {
super(ViewType.Label);
this.foregroundColor = labelData.color || R.colors.elements.labels.foreground;
this.highlightable = labelData.highlightable;
if (labelData.backgroundColor) {
this.textMesh = this.createTextMesh(
labelData.content,
labelData.fontFace,
labelData.fontSize,
labelData.alignment,
labelData.horizontalAlign,
labelData.verticalAlign,
this.foregroundColor,
labelData.opacity,
1);
this.textMesh.addEventListener("synccomplete", () => {
if (this.backgroundMesh) {
this._viewObject.remove(this.backgroundMesh);
}
if (this.textMesh.text) {
const bounds = this.textMesh.textRenderInfo.blockBounds;
this.backgroundMesh =
this.createBackgroundBox(bounds[0], bounds[1], bounds[2], bounds[3], 0);
this._viewObject.add(this.backgroundMesh);
}
});
} else {
this.textMesh = this.createTextMesh(
labelData.content,
labelData.fontFace,
labelData.fontSize,
labelData.alignment,
labelData.horizontalAlign,
labelData.verticalAlign,
this.foregroundColor,
labelData.opacity,
0);
}
this.syncIfVisible();
this._viewObject.add(this.textMesh);
}
public onFrameRendered(elapsedTime: number) {
if (this.highlightable) {
this.setLabelHighlightState();
}
}
private setLabelHighlightState() {
const labelMaterial = this.textMesh.material as MeshBasicMaterial;
if (this._isHighlighted) {
labelMaterial.color.set(R.colors.elements.labels.highlighted);
} else {
labelMaterial.color.set(this.foregroundColor);
}
}
private createTextMesh(content: string,
fontFace = R.layout.labels.font_face.regular,
fontSize = R.layout.labels.font_size,
textAlign = TextAlign.center,
horizontalAlign = HorizontalAlign.center,
verticalAlign = VerticalAlign.middle,
color: string,
opacity = 1,
zLevel: number) {
const labelMesh = new Text();
labelMesh.font = fontFace;
labelMesh.text = content || "";
labelMesh.fontSize = fontSize;
labelMesh.position.z = zLevel;
labelMesh.color = color;
labelMesh.textAlign = textAlign;
labelMesh.anchorX = horizontalAlign;
labelMesh.anchorY = verticalAlign;
labelMesh.material.opacity = opacity;
labelMesh.name = "LabelView";
return labelMesh;
}
private createBackgroundBox(startX: number, startY: number, endX: number, endY: number, zLevel: number) {
const paddingLeft = 1;
const paddingRight = 2;
const paddingTop = 1;
const paddingBottom = 0;
const width = Math.abs(startX) + Math.abs(endX) + paddingLeft + paddingRight;
const height = Math.abs(startY) + Math.abs(endY) + (paddingTop + paddingBottom);
const geometry = GeometryInstances.getInstance().getPlaneGeometryInstance(width, height);
const material = MaterialInstances.getInstance().backgroundColorMaterial;
const mesh = new Mesh(geometry, material);
const posX = ((startX + endX) / 2) + (paddingLeft / 4);
const posY = ((startY + endY) / 2) - (paddingBottom);
// The z level of element in accordance with standards defined in resources
mesh.position.set(posX, posY, zLevel);
mesh.name = "LabelBackgroundBox";
return mesh;
}
}
рд╣рдореНрдо, рдореЗрд░рд╛ рдХреВрдмрдбрд╝ рд╣реЛрдЧрд╛ рд╕рд┐рдВрдХрдЗрдлрд╡рд┐рдЬрд┐рдмрд▓ () рдХреЛ .visible рдХреЛ рдЧрд▓рдд рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╣рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдмрд┐рдирд╛ рдпрд╣ рдЬрд╛рдиреЗ рдХрд┐ рдЖрдкрдХрд╛ рд╡реНрдпреВ рд╕рд┐рд╕реНрдЯрдо рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдХреБрдЫ рдФрд░ рдЬреЛ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рдВрдкрддреНрддрд┐ рдкрд░рд┐рд╡рд░реНрддрди (рд╕рд╛рдордЧреНрд░реА, рдЯреЗрдХреНрд╕реНрдЯ рдПрд▓рд╛рдЗрди, рдХреНрд╖реИрддрд┐рдЬ рд╕рдВрд░реЗрдЦрдг, рдЖрджрд┐) рдХреЗ рдмрд╛рдж рд╕рд┐рдВрдХ рдЗрдлрд╡рд┐рдЬрд╝рд┐рдмрд▓ рдХреЙрд▓ рдЬрд╛рд░реА рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдЕрдзрд┐рдХ рдХреЙрд▓ рдЬрд╛рд░реА рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдЖрдкрдХреЗ рд╡реНрдпреВ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рдЬреАрд╡рдирдЪрдХреНрд░ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рд╕рднреА рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЧреБрдгреЛрдВ рдХреЗ рд╕реЗрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдПрдХрд▓ рд╕рд┐рдВрдХ рдХреЙрд▓ рдЬрд╛рд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред
рдЖрдкрдиреЗ рдЬреЛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ, рдЙрд╕рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд░рд╣реА рд╣реИ; рдЗрд╕рдиреЗ рдПрдХ рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ред рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдБ; рдпрджрд┐ рдЖрдк рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред рдзрдиреНрдпрд╡рд╛рдж!
рдмрд╕ рдЗрд╕ рдкрд░ рд╡рд╛рдкрд╕ рдЖ рд░рд╣рд╛ рд╣реВрдБ
рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рджреГрд╢реНрдп рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ 1000 рд╕реЗ рдЕрдзрд┐рдХ рдЯреЗрдХреНрд╕реНрдЯ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдБ рдмрд╕ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рднреА рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣реЗ рд╣реИрдВ
рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдмрд╕ рдХреБрдЫ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдорд╛рдЙрд╕-рдУрд╡рд░ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ
рддреЛ рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣рд╛рдВ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ:
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рдкрд╣рд▓реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдЬрд╛рдКрдВрдЧрд╛ред рдореИрдВ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЙрди рд╕рднреА рдЫрд┐рдкреА рд╣реБрдИ рд▓реЗрдмрд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рджреГрд╢реНрдп рдЧреНрд░рд╛рдл рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрдиреЗ рдХрд╛ рдХреЛрдИ рдлрд╛рдпрджрд╛ рд╣реИред
рд╕рдордЭ рд▓рд┐рдпрд╛
рдореБрдЭреЗ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдорд╛рдЙрд╕ рд╣реЛрд╡рд░ рдкрд░ рдЙрдиреНрд╣реЗрдВ рдЬрд▓реНрджреА рд╕реЗ рджрд┐рдЦрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рдХреНрдпрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рдж рдЙрдиреНрд╣реЗрдВ рдирд╖реНрдЯ рдХрд░рдиреЗ рдФрд░ рд╣реЛрд╡рд░ рдкрд░ рдирдП рдмрдирд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрдВрдЧреЗ рдпрд╛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЙрдиреНрд╣реЗрдВ рдереНрд░реАрдЬреЗ рджреГрд╢реНрдп рд╕реЗ рд╣рдЯрд╛ рджреЗрдВрдЧреЗ?
рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдХрд╣реВрдВ рддреЛ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдЕрдВрддрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ рддреЛ рд╣реА рдореИрдВ рдкреНрд░рдмрдВрдзрди рдФрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдЪреАрдЬ рд╕реЗ рд╢реБрд░реВ рдХрд░реВрдВрдЧрд╛ред
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВрдиреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдмрдирд╛рдиреЗ/рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╣рдореЗрд╢рд╛ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИред