╨╧рб▒с>■  ■                                                                                                                                                                                                                                                                                                                                                                                                                                                   Root Entry        pк|Yкr╧ГRASH hЯСE ┴@Contents        EЇPage 1            ,╜1Symbol 3            ▀+¤               ■    ■                                                                                                                                       ■   -./0123456789:;<=>?@ABCD■   FGHIJKLMN■                                                                                                                                                                                                       Root Entry        pк|Yкr╧ГRASH░Ж*гE ┴@Contents        #ЇPage 1             ╜1Symbol 3            ▀        ¤   ■   ■    ■     !"■   $%&'()*O                                                                                                                                                P■                                                                                                                                                                                               Symbol 2        8Symbol 1    ╙                         ■   ■   ■                                                                                                                                                                                                                                                                                                                                                                                                                                 CPicPage   CPicLayer   CPicFrameАА$╠╠f Щ ╫D БрА╘√ №¤№ А╒╔А Aў├▌°├ЇЎфА т═U■А NА А▒'А=╒╩А~ ■ №╘И ╒7ї▀ж"А<. Ає3·НАє№н∙█·АЄяqёщАчА─їhАЭXX░и4|P и4иXX■░4ДX■P 4ииP X■4Д░X■4XииP 4|и░╫О °п ╨ ш4Аў>#№xАўАM∙МёА&ЎоюАZ№o∙Аqї+¤АЇтm FЇч▐9я▄n b▌А╞-e∙ї& ШїААў   ?  ААgraphics    OА  АА   CPicSprite    OonClipEvent (enterFrame) { _parent.gotoNextDest(); _parent.faceDest(); }АА   ?  ААprocess: call gotoNextDest()     OO АА  CPicPage   CPicLayer   CPicFrameААЩ Щ UА%ъ є є р эрєєєєрэ р є є    ?  ААLayer 1    OА  АА  CPicPage   CPicLayer   CPicFrameАА   ?  ААLayer 1    OА  АА  CPicPage   CPicLayer   CPicFrame  CPicTextАА{$k   Е█  РX@G└Arialf╠Щ "ф¤thisFollower.assignNextDest = function () {if (this.destList.length>0) ААА▓(3Е█  c0@└ArialЩ Щ "м■follow a grid of pointsАААt ▀$╕@6ArialЩ Щ "(a variation on following a list of points, this codebase moves a clip randomly around a grid of points defined by a multidimensional map array. clips are rotated to face their next destination. clips never reverse direction (always move forward) and only move to horizontally or vertically neighbouring points.ААЩ╠f ёаU00>0`к8 j· ищ8 Ў (╪   ?  ААbg      O АААА    ?  gotoAndStop("beginMovie");ААА   ?  init();ААscripts: general    Щ3╠ АААА    ?  ААА   ?   // Returns an integer in the range minVal to maxVal, inclusive function myRandom (minVal, maxVal) { do { var r = Math.random(); // Keep picking a number until it is not 1. } while (r == 1); return minVal + Math.floor(r * (maxVal + 1 - minVal)); }ААscripts: myRandom()    Щ3╠ АААА    ?  ААА   ?  Т// Converts radians to degrees. There are 2pi radians per 360 degrees. function radiansToDegrees(radians) { return (radians/Math.PI) * 180; }ААscripts: radiansToDegrees()    O   АААА    ?  ААА   ?   j/* ******************************* *** FUNCTION makeFollower() *** *** grid variation *** ******************************* > VERSION: 1.0.1 > DESCRIPTION: Creates a movie clip and assigns it methods for managing a list of points and moving towards each point sequentially. This function is effectively (though not technically) a constructor function that generates clip-object instances. Also includes methods for randomly moving to points on a grid. > PARAMETERS: name The instance name of the new clip. x Starting horizontal location of the clip. y Starting vertical location of the clip. speed Distance the clip travels, in pixels per second. */ function makeFollower (name, x, y, speed) { // Keep a count so each follower gets a unique id. followerCount++; // Make the new follower clip. this.attachMovie("follower", name, followerCount); // Store a convenient reference to the new follower. thisFollower = this[name]; // Position the new follower clip. thisFollower._x = x; thisFollower._y = y; // Set up some basic properties for the follower... thisFollower.destList = new Array(); // The list of points to follow thisFollower.speed = speed; // The speed of the follower thisFollower.currentDest = null; // The follower's current destination. thisFollower.lastDest = null; thisFollower.reachedDest = false; // Flag set when each dest is reached. thisFollower.lastTick = getTimer(); // The time the follower last moved. // ======== Follower Methods ========= // Next we assign the follower clip // functions that act as methods. // *** addDest() *** // Adds a destination point to the end of the point list. thisFollower.addDest = function (tileObj) { // Create a new point object. // var newDest = { x: x, y: y }; // Tack it onto the end of the list. this.destList.push(tileObj); } // *** assignNextDest() *** // Sets the next point (currentDest) towards which // the follower will move (the oldest point on the list). thisFollower.assignNextDest = function () { // If there are destinations left on the list, then // go to the next one. Otherwise, pick one randomly from the map. if (this.destList.length > 0) { // Remember where this follower came from // in case we want to stop it from returning there // next time we pick a random destination. this.lastDest = this.currentDest; // Get the next destination off the list. this.currentDest = this.destList.shift(); // Note that the follower is now chasing a new point. this.reachedDest = false; } else { // No destination was on the list, so pick one randomly. // Figure out where the destination is on the map. var currentRow = Math.floor(this.currentDest.id / gameRoot.map[0].length); var currentColumn = this.currentDest.id % gameRoot.map[0].length; // Pick a move that's legal on the map. var nextDest = null; while (nextDest == null) { // Keep picking til we find a legal move. // 0 == up, 1 == right, 2 == down, 3 == left nextMove = gameRoot.myRandom(0,3); // If the move is legal, set it as the next destination. if (nextMove == 0) { if (currentRow > 0) { nextDest = gameRoot.map[currentRow - 1][currentColumn]; } } else if (nextMove == 1) { if (currentColumn < gameRoot.map[currentRow].length) { nextDest = gameRoot.map[currentRow][currentColumn + 1]; } } else if (nextMove == 2) { if (currentRow < gameRoot.map.length) { nextDest = gameRoot.map[currentRow + 1][currentColumn]; } } else if (nextMove == 3) { if (currentColumn > 0) { nextDest = gameRoot.map[currentRow][currentColumn - 1]; } } // But don't go back the way we came... if (nextDest == this.lastDest) nextDest = null; } // Now add the random destination and start following it. this.addDest(nextDest); this.assignNextDest(); } } // *** gotoNextDest() *** // Moves the follower towards currentDest according to // the follower's speed. thisFollower.gotoNextDest = function () { // trace("Moving towards: " + this.currentDest.x + ", " + this.currentDest.y); // leaves a trail...use for testing. // _root.fcount++; // _root.attachMovie("point", "fpoint" + this._name + _root.fcount, 20000 + _root.fcount); // _root["fpoint" + this._name + _root.fcount]._x = this._x; // _root["fpoint" + this._name + _root.fcount]._y = this._y; // If there's an active current destination... if (this.currentDest != null) { // If the clip hasn't arrived on either axis of the destination... if (this._x != this.currentDest.x || this._y != this.currentDest.y || !this.reachedDest) { // ...measure time elapsed since the last move this.thisTick = getTimer(); this.elapsedSeconds = (this.thisTick - this.lastTick) / 1000; this.lastTick = this.thisTick; // Calculate distance to move based on time passed and speed. this.moveDist = this.speed * this.elapsedSeconds; // Determine distance between clip and destination var deltaX = this._x - this.currentDest.x; var deltaY = this._y - this.currentDest.y; var dist = Math.sqrt((deltaX * deltaX) + (deltaY * deltaY)); // If the clip has enough speed to overshoot the destination, // just go to the destination. Otherwise move according to // the clip's speed. if (this.moveDist >= dist) { this._x = this.currentDest.x; this._y = this.currentDest.y; // Note that we've arrived... this.reachedDest = true; // ...and then go to the next point on // the list. this.assignNextDest(); } else { // Allocate speed between x and y axes var moveX = this.moveDist * (deltaX / dist); var moveY = this.moveDist * (deltaY / dist); // Move follower towards the destination. this._x -= moveX; this._y -= moveY; } } } } // *** faceDest() *** // Rotates the follower to face its next destination. thisFollower.faceDest = function () { if (this.currentDest != null) { // Create a point object that stores the x and y coordinates of // the clip relative to its parent's registration point var clipPoint = {x:this._x, y:this._y}; // Convert local clip coordinates to global (Stage) coordinates this._parent.localToGlobal(clipPoint); // Convert destination point coordinates to global coordinates destPoint = { x: currentDest.x, y: currentDest.y }; this._parent.localToGlobal(destPoint); // Measure the distance between the registration // point of the clip and the target point var deltaX = destPoint.x - clipPoint.x; var deltaY = destPoint.y - clipPoint.y; // Calculate the angle of the line from the registration point // of this clip to the mouse var rotationRadian = Math.atan2(deltaY, deltaX); // Convert the radian version of the angle to degrees var rotationAngle = gameRoot.radiansToDegrees(rotationRadian); // Update the rotation of this clip to point to the mouse this._rotation = rotationAngle; } } }ААscripts: makeFollower()     OO АААА    ?  ААА   ?   ╗// Creates a grid for the followers to move on. function makeMap () { // Make row 1 var point0 = { x: 100, y: 250, id: 0 }; var point1 = { x: 200, y: 250, id: 1 }; var point2 = { x: 300, y: 250, id: 2 }; var point3 = { x: 400, y: 250, id: 3 }; var row1 = [point0, point1, point2, point3]; // Make row 2 var point4 = { x: 100, y: 350, id: 4 }; var point5 = { x: 200, y: 350, id: 5 }; var point6 = { x: 300, y: 350, id: 6 }; var point7 = { x: 400, y: 350, id: 7 }; var row2 = [point4, point5, point6, point7]; // Assign the rows to the grid. map = [row1, row2]; // Cosmetic: place points on screen so we // can see the grid. var tileCount = 0; for (var i = 0; i < map.length; i++) { for (var j = 0; j < map[i].length; j++) { this.attachMovie("point", "p" + i + j, 500 + ++tileCount); this["p" + i + j]._x = map[i][j].x; this["p" + i + j]._y = map[i][j].y; } } }ААscripts: makeMap();    O O АААА    ?  ААА   ?   ∙ function init () { // Create a global reference to the _root timeline. MovieClip.prototype.gameRoot = this; // Create the grid. makeMap(); // create followers var numFollowers = 3; for (var i = 1; i <= numFollowers; i++) { makeFollower("follower" + i, 0, 0, myRandom(20,170)); // Add a point to the destination list. this["follower" + i].addDest(map[0][myRandom(0,3)]); // Start the follower following. this["follower" + i].assignNextDest(); } }ААscripts: init()    ААА АААА    ?  ААА   ?   beginMovieААlabels     OO АА яАf3 dя0АЩ3 ]яHА╠3 Zя`А 3 XяxА    CDocumentPage Page 1Scene 1Fo;4Ыq;А Symbol 3 emptyClip╗o;  emptyClip╗o;А Symbol 2pointСo;point ]o;А Symbol 1follower To; followerОvq;°*@hЕhhhhЩff └└└ ┤Vector::Template"PublishFormatProperties::generator    №   CColorDef А А А3 PяАf Pя0АЩ PяHА╠ Pя`А  PяxА3 яА33 (яА3f <я0А3Щ CяHА3╠ Fя`А3  HяxАf я0Аf3 я0Аff (я0АfЩ 5яHАf╠ <я`Аf  @яxА А333 0А А3 аяА33 xяАf3 dя0АЩ3 ]яHА╠3 Zя`А 3 XяxА33 ╚яА333 0А3f3 PPHА3Щ3 Px`А3╠3 PРxА3 3 PяРАf3 ▄я0Аf33 PHАff3 (PHАfЩ3 <x`Аf╠3 CРxАf 3 FяРА Аfff `А Аf ая0А3f Мя0Аff xя0АЩf kяHА╠f dя`А f `яxА3f ┤я0А33f аPHА3ff xPHА3Щf dx`А3╠f ]РxА3 f ZяРАff ╚я0Аf3f ╚PHАfff `АfЩf P0xАf╠f PxРАf f PяиА АЩЩЩ РА АЩ аяHА3Щ УяHАfЩ ЕяHАЩЩ xяHА╠Щ nя`А Щ hяxА3Щ няHА33Щ аx`А3fЩ Мx`А3ЩЩ xx`А3╠Щ kРxА3 Щ dяРАfЩ ╗яHАf3Щ ┤x`АffЩ а0xАfЩЩ x0xАf╠Щ dxРАf Щ ]яиА А╠╠╠ └А А╠ ая`А3╠ Ця`Аf╠ Мя`АЩ╠ Вя`А╠╠ xя`А ╠ pяxА3╠ кя`А33╠ аРxА3f╠ УРxА3Щ╠ ЕРxА3╠╠ xРxА3 ╠ nяРАf╠ ┤я`Аf3╠ нРxАff╠ аxРАfЩ╠ МxРАf╠╠ xxРАf ╠ kяиА А    ЁА А  аяxА3  ШяxАf  РяxАЩ  ИяxА╠  АяxА   xяxА3  ияxА33  аяРА3f  ЦяРА3Щ  МяРА3╠  ВяРА3   xяРАf  ░яxАf3  кяРАff  аяиАfЩ  УяиАf╠  ЕяиАf   xяиА А  яxА АЩ яHАЩ3  яHАЩf яHАЩЩ (яHАЩ╠ 2я`АЩ  8яxА╠ я`А╠3  я`А╠f я`А╠Щ я`А╠╠ (я`А╠  0яxА  яxА 3 яxА f яxА Щ яxА ╠  яxА   (яxА А  PяxА АЩ3 уяHАЩ33 x`АЩf3 x`АЩЩ3 (x`АЩ╠3 5РxАЩ 3 <яРА╠3 ця`А╠33 РxА╠f3  РxА╠Щ3 РxА╠╠3 (РxА╠ 3 2яРА 3 шяxА 33 яРА f3  яРА Щ3 яРА ╠3 яРА  3 (яРА А  аяxА АЩf ╒яHАЩ3f ▄x`АЩff 0xАЩЩf (0xАЩ╠f <xРАЩ f CяиА╠f ▄я`А╠3f уРxА╠ff xРА╠Щf xРА╠╠f (xРА╠ f 5яиА f ряxА 3f цяРА ff яиА Щf  яиА ╠f яиА  f (яиА А   (яxА АЩЩ ╚яHАЩ3Щ ╚x`АЩfЩ ╚0xАЩЩЩ РАЩ╠Щ PPиАЩ Щ Pя└А╠Щ ╥я`А╠3Щ ╒РxА╠fЩ ▄xРА╠ЩЩ PиА╠╠Щ (PиА╠ Щ <я└А Щ ╪яxА 3Щ ▄яРА fЩ уяиА ЩЩ я└А ╠Щ я└А  Щ (я└А А   xяxА АЩ╠ ╛я`АЩ3╠ ╗РxАЩf╠ ┤xРАЩЩ╠ аPиАЩ╠╠ xPиАЩ ╠ dя└А╠╠ ╚я`А╠3╠ ╚РxА╠f╠ ╚xРА╠Щ╠ ╚PиА╠╠╠ └А╠ ╠ Pя╪А ╠ ╨яxА 3╠ ╥яРА f╠ ╒яиА Щ╠ ▄я└А ╠╠ я╪А  ╠ (я╪А А   ╚яxА АЩ  ╕яxSymbol 2        8Symbol 1    ╙                          CPicPage   CPicLayer   CPicFrame  CPicTextАА{$k   Е█  РX@G└Arialf╠Щ "ф¤thisFollower.assignNextDest = function () {if (this.destList.length>0) ААА▓(3Е█  c0@└ArialЩ Щ "м■follow a grid of pointsАААt ▀$╕@6ArialЩ Щ "(a variation on following a list of points, this codebase moves a clip randomly around a grid of points defined by a multidimensional map array. clips are rotated to face their next destination. clips never reverse direction (always move forward) and only move to horizontally or vertically neighbouring points.ААЩ╠f ёаU00>0`к8 j· ищ8 Ў (╪   ?  ААbg      O АААА    ?  gotoAndStop("beginMovie");ААА   ?  init();ААscripts: general    Щ3╠ АААА    ?  ААА   ?   // Returns an integer in the range minVal to maxVal, inclusive function myRandom (minVal, maxVal) { do { var r = Math.random(); // Keep picking a number until it is not 1. } while (r == 1); return minVal + Math.floor(r * (maxVal + 1 - minVal)); }ААscripts: myRandom()    Щ3╠ АААА    ?  ААА   ?  Т// Converts radians to degrees. There are 2pi radians per 360 degrees. function radiansToDegrees(radians) { return (radians/Math.PI) * 180; }ААscripts: radiansToDegrees()    O   АААА    ?  ААА   ?   j/* ******************************* *** FUNCTION makeFollower() *** *** grid variation *** ******************************* > VERSION: 1.0.1 > DESCRIPTION: Creates a movie clip and assigns it methods for managing a list of points and moving towards each point sequentially. This function is effectively (though not technically) a constructor function that generates clip-object instances. Also includes methods for randomly moving to points on a grid. > PARAMETERS: name The instance name of the new clip. x Starting horizontal location of the clip. y Starting vertical location of the clip. speed Distance the clip travels, in pixels per second. */ function makeFollower (name, x, y, speed) { // Keep a count so each follower gets a unique id. followerCount++; // Make the new follower clip. this.attachMovie("follower", name, followerCount); // Store a convenient reference to the new follower. thisFollower = this[name]; // Position the new follower clip. thisFollower._x = x; thisFollower._y = y; // Set up some basic properties for the follower... thisFollower.destList = new Array(); // The list of points to follow thisFollower.speed = speed; // The speed of the follower thisFollower.currentDest = null; // The follower's current destination. thisFollower.lastDest = null; thisFollower.reachedDest = false; // Flag set when each dest is reached. thisFollower.lastTick = getTimer(); // The time the follower last moved. // ======== Follower Methods ========= // Next we assign the follower clip // functions that act as methods. // *** addDest() *** // Adds a destination point to the end of the point list. thisFollower.addDest = function (tileObj) { // Create a new point object. // var newDest = { x: x, y: y }; // Tack it onto the end of the list. this.destList.push(tileObj); } // *** assignNextDest() *** // Sets the next point (currentDest) towards which // the follower will move (the oldest point on the list). thisFollower.assignNextDest = function () { // If there are destinations left on the list, then // go to the next one. Otherwise, pick one randomly from the map. if (this.destList.length > 0) { // Remember where this follower came from // in case we want to stop it from returning there // next time we pick a random destination. this.lastDest = this.currentDest; // Get the next destination off the list. this.currentDest = this.destList.shift(); // Note that the follower is now chasing a new point. this.reachedDest = false; } else { // No destination was on the list, so pick one randomly. // Figure out where the destination is on the map. var currentRow = Math.floor(this.currentDest.id / gameRoot.map[0].length); var currentColumn = this.currentDest.id % gameRoot.map[0].length; // Pick a move that's legal on the map. var nextDest = null; while (nextDest == null) { // Keep picking til we find a legal move. // 0 == up, 1 == right, 2 == down, 3 == left nextMove = gameRoot.myRandom(0,3); // If the move is legal, set it as the next destination. if (nextMove == 0) { if (currentRow > 0) { nextDest = gameRoot.map[currentRow - 1][currentColumn]; } } else if (nextMove == 1) { if (currentColumn < gameRoot.map[currentRow].length) { nextDest = gameRoot.map[currentRow][currentColumn + 1]; } } else if (nextMove == 2) { if (currentRow < gameRoot.map.length) { nextDest = gameRoot.map[currentRow + 1][currentColumn]; } } else if (nextMove == 3) { if (currentColumn > 0) { nextDest = gameRoot.map[currentRow][currentColumn - 1]; } } // But don't go back the way we came... if (nextDest == this.lastDest) nextDest = null; } // Now add the random destination and start following it. this.addDest(nextDest); this.assignNextDest(); } } // *** gotoNextDest() *** // Moves the follower towards currentDest according to // the follower's speed. thisFollower.gotoNextDest = function () { // trace("Moving towards: " + this.currentDest.x + ", " + this.currentDest.y); // leaves a trail...use for testing. // _root.fcount++; // _root.attachMovie("point", "fpoint" + this._name + _root.fcount, 20000 + _root.fcount); // _root["fpoint" + this._name + _root.fcount]._x = this._x; // _root["fpoint" + this._name + _root.fcount]._y = this._y; // If there's an active current destination... if (this.currentDest != null) { // If the clip hasn't arrived on either axis of the destination... if (this._x != this.currentDest.x || this._y != this.currentDest.y || !this.reachedDest) { // ...measure time elapsed since the last move this.thisTick = getTimer(); this.elapsedSeconds = (this.thisTick - this.lastTick) / 1000; this.lastTick = this.thisTick; // Calculate distance to move based on time passed and speed. this.moveDist = this.speed * this.elapsedSeconds; // Determine distance between clip and destination var deltaX = this._x - this.currentDest.x; var deltaY = this._y - this.currentDest.y; var dist = Math.sqrt((deltaX * deltaX) + (deltaY * deltaY)); // If the clip has enough speed to overshoot the destination, // just go to the destination. Otherwise move according to // the clip's speed. if (this.moveDist >= dist) { this._x = this.currentDest.x; this._y = this.currentDest.y; // Note that we've arrived... this.reachedDest = true; // ...and then go to the next point on // the list. this.assignNextDest(); } else { // Allocate speed between x and y axes var moveX = this.moveDist * (deltaX / dist); var moveY = this.moveDist * (deltaY / dist); // Move follower towards the destination. this._x -= moveX; this._y -= moveY; } } } } // *** faceDest() *** // Rotates the follower to face its next destination. thisFollower.faceDest = function () { if (this.currentDest != null) { // Create a point object that stores the x and y coordinates of // the clip relative to its parent's registration point var clipPoint = {x:this._x, y:this._y}; // Convert local clip coordinates to global (Stage) coordinates this._parent.localToGlobal(clipPoint); // Convert destination point coordinates to global coordinates destPoint = { x: currentDest.x, y: currentDest.y }; this._parent.localToGlobal(destPoint); // Measure the distance between the registration // point of the clip and the target point var deltaX = destPoint.x - clipPoint.x; var deltaY = destPoint.y - clipPoint.y; // Calculate the angle of the line from the registration point // of this clip to the mouse var rotationRadian = Math.atan2(deltaY, deltaX); // Convert the radian version of the angle to degrees var rotationAngle = gameRoot.radiansToDegrees(rotationRadian); // Update the rotation of this clip to point to the mouse this._rotation = rotationAngle; } } }ААscripts: makeFollower()     OO АААА    ?  ААА   ?   ╗// Creates a grid for the followers to move on. function makeMap () { // Make row 1 var point0 = { x: 100, y: 250, id: 0 }; var point1 = { x: 200, y: 250, id: 1 }; var point2 = { x: 300, y: 250, id: 2 }; var point3 = { x: 400, y: 250, id: 3 }; var row1 = [point0, point1, point2, point3]; // Make row 2 var point4 = { x: 100, y: 350, id: 4 }; var point5 = { x: 200, y: 350, id: 5 }; var point6 = { x: 300, y: 350, id: 6 }; var point7 = { x: 400, y: 350, id: 7 }; var row2 = [point4, point5, point6, point7]; // Assign the rows to the grid. map = [row1, row2]; // Cosmetic: place points on screen so we // can see the grid. var tileCount = 0; for (var i = 0; i < map.length; i++) { for (var j = 0; j < map[i].length; j++) { this.attachMovie("point", "p" + i + j, 500 + ++tileCount); this["p" + i + j]._x = map[i][j].x; this["p" + i + j]._y = map[i][j].y; } } }ААscripts: makeMap();    O O АААА    ?  ААА   ?   ∙ function init () { // Create a global reference to the _root timeline. MovieClip.prototype.gameRoot = this; // Create the grid. makeMap(); // create followers var numFollowers = 3; for (var i = 1; i <= numFollowers; i++) { makeFollower("follower" + i, 0, 0, myRandom(20,170)); // Add a point to the destination list. this["follower" + i].addDest(map[0][myRandom(0,3)]); // Start the follower following. this["follower" + i].assignNextDest(); } }ААscripts: init()    ААА АААА    ?  ААА   ?   beginMovieААlabels     OO АА    CDocumentPage Page 1Scene 1Fo;4Ыq;А Symbol 3 emptyClip╗o;  emptyClip╗o;А Symbol 2pointСo;point ]o;А Symbol 1follower To; followerОvq;°*@hЕhhhhЩff └└└ ┤Vector::Template"PublishFormatProperties::generator    №   CColorDef А А А3 PяАf Pя0АЩ PяHА╠ Pя`А  PяxА3 яА33 (яА3f <я0А3Щ CяHА3╠ Fя`А3  HяxАf я0Аf3 я0Аff (я0АfЩ 5яHАf╠ <я`Аf  @яxА А333 0А А3 аяА33 xяАf3 dя0АЩ3 ]яHА╠3 Zя`А 3 XяxА33 ╚яА333 0А3f3 PPHА3Щ3 Px`А3╠3 PРxА3 3 PяРАf3 ▄я0Аf33 PHАff3 (PHАfЩ3 <x`Аf╠3 CРxАf 3 FяРА Аfff `А Аf ая0А3f Мя0Аff xя0АЩf kяHА╠f dя`А f `яxА3f ┤я0А33f аPHА3ff xPHА3Щf dx`А3╠f ]РxА3 f ZяРАff ╚я0Аf3f ╚PHАfff `АfЩf P0xАf╠f PxРАf f PяиА АЩЩЩ РА АЩ аяHА3Щ УяHАfЩ ЕяHАЩЩ xяHА╠Щ nя`А Щ hяxА3Щ няHА33Щ аx`А3fЩ Мx`А3ЩЩ xx`А3╠Щ kРxА3 Щ dяРАfЩ ╗яHАf3Щ ┤x`АffЩ а0xАfЩЩ x0xАf╠Щ dxРАf Щ ]яиА А╠╠╠ └А А╠ ая`А3╠ Ця`Аf╠ Мя`АЩ╠ Вя`А╠╠ xя`А ╠ pяxА3╠ кя`А33╠ аРxА3f╠ УРxА3Щ╠ ЕРxА3╠╠ xРxА3 ╠ nяРАf╠ ┤я`Аf3╠ нРxАff╠ аxРАfЩ╠ МxРАf╠╠ xxРАf ╠ kяиА А    ЁА А  аяxА3  ШяxАf  РяxАЩ  ИяxА╠  АяxА   xяxА3  ияxА33  аяРА3f  ЦяРА3Щ  МяРА3╠  ВяРА3   xяРАf  ░яxАf3  кяРАff  аяиАfЩ  УяиАf╠  ЕяиАf   xяиА А  яxА АЩ яHАЩ3  яHАЩf яHАЩЩ (яHАЩ╠ 2я`АЩ  8яxА╠ я`А╠3  я`А╠f я`А╠Щ я`А╠╠ (я`А╠  0яxА  яxА 3 яxА f яxА Щ яxА ╠  яxА   (яxА А  PяxА АЩ3 уяHАЩ33 x`АЩf3 x`АЩЩ3 (x`АЩ╠3 5РxАЩ 3 <яРА╠3 ця`А╠33 РxА╠f3  РxА╠Щ3 РxА╠╠3 (РxА╠ 3 2яРА 3 шяxА 33 яРА f3  яРА Щ3 яРА ╠3 яРА  3 (яРА А  аяxА АЩf ╒яHАЩ3f ▄x`АЩff 0xАЩЩf (0xАЩ╠f <xРАЩ f CяиА╠f ▄я`А╠3f уРxА╠ff xРА╠Щf xРА╠╠f (xРА╠ f 5яиА f ряxА 3f цяРА ff яиА Щf  яиА ╠f яиА  f (яиА А   (яxА АЩЩ ╚яHАЩ3Щ ╚x`АЩfЩ ╚0xАЩЩЩ РАЩ╠Щ PPиАЩ Щ Pя└А╠Щ ╥я`А╠3Щ ╒РxА╠fЩ ▄xРА╠ЩЩ PиА╠╠Щ (PиА╠ Щ <я└А Щ ╪яxА 3Щ ▄яРА fЩ уяиА ЩЩ я└А ╠Щ я└А  Щ (я└А А   xяxА АЩ╠ ╛я`АЩ3╠ ╗РxАЩf╠ ┤xРАЩЩ╠ аPиАЩ╠╠ xPиАЩ ╠ dя└А╠╠ ╚я`А╠3╠ ╚РxА╠f╠ ╚xРА╠Щ╠ ╚PиА╠╠╠ └А╠ ╠ Pя╪А ╠ ╨яxА 3╠ ╥яРА f╠ ╒яиА Щ╠ ▄я└А ╠╠ я╪А  ╠ (я╪А А   ╚яxА АЩ  ╕яxАЩ3  ┤яРАЩf  няиАЩЩ  ая└АЩ╠  Мя└АЩ   xя└А╠  └яxА╠3  ╛яРА╠f  ╗яиА╠Щ  ┤я└А╠╠  ая╪А╠   xя╪А   ╚яxА 3  ╚яРА f  ╚яиА Щ  ╚я└А ╠  ╚я╪А    ЁА А       А       А     А     А     А f¤ `    z    АЩf к ╠      А   *   ]     к  ╘       оM▀  hАЩ3  ┤яРАЩf  няиАЩЩ  ая└АЩ╠  Мя└АЩ   xя└А╠  └яxА╠3  ╛яРА╠f  ╗яиА╠Щ  ┤я└А╠╠  ая╪А╠   xя╪А   ╚яxА 3  ╚яРА f  ╚яиА Щ  ╚я└А ╠  ╚я╪А    ЁА А       А       А     А     А     А f¤ `    z    АЩf к ╠      А   *   ]     к  ╘       оM▀  h