Skip to content
Browse files

For #342 - adds a rails mvc diagram as requested

  • Loading branch information...
1 parent b3eac61 commit 9bbba9dc7cc71eef2553213160e7bb4ebb099020 @addyosmani committed Mar 31, 2013
View
BIN backbone-fundamentals.epub
Binary file not shown.
View
8 backbone-fundamentals.md
@@ -194,9 +194,13 @@ Martin Fowler has done an excellent job of writing about the [origins](http://ma
### MVC Applied To The Web
-The web heavily relies on the HTTP protocol, which is stateless. This means that there is not a constantly open connection between the browser and server; each request instantiates a new communication channel between the two. Once the request initiator (e.g., a browser) gets a response the connection is closed. This fact creates a completely different context when compared to the one of the operating systems on which many of the original MVC ideas were developed. The MVC implementation has to conform to the web context.
+The web heavily relies on the HTTP protocol, which is stateless. This means that there is not a constantly open connection between the browser and server; each request instantiates a new communication channel between the two. Once the request initiator (e.g. a browser) gets a response the connection is closed. This fact creates a completely different context when compared to the one of the operating systems on which many of the original MVC ideas were developed. The MVC implementation has to conform to the web context.
-An example of a server-side web application framework which tries to apply MVC to the web context is [Ruby On Rails](http://guides.rubyonrails.org/). At it's core are the three MVC components we would expect - the Model, View and Controller architecture. In Rails:
+An example of a server-side web application framework which tries to apply MVC to the web context is [Ruby On Rails](http://guides.rubyonrails.org/).
+
+![](img/rails_mvc.png)
+
+At it's core are the three MVC components we would expect - the Model, View and Controller architecture. In Rails:
* Models represent the data in an application and are typically used to manage rules for interacting with a specific database table. You generally have one table corresponding to one model with much of your application's business logic living within these models.
* Views represent your user interface, often taking the form of HTML that will be sent down to the browser. They're used to present application data to anything making requests from your application.
View
6 backbone-fundamentals.rtf
@@ -180,11 +180,13 @@ origins
}}}
of MVC over the years and if you are interested in further historical information about Smalltalk-80\u8217's MVC, I recommend reading his work.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs28 MVC Applied To The Web\par}
-{\pard \ql \f0 \sa180 \li0 \fi0 The web heavily relies on the HTTP protocol, which is stateless. This means that there is not a constantly open connection between the browser and server; each request instantiates a new communication channel between the two. Once the request initiator (e.g., a browser) gets a response the connection is closed. This fact creates a completely different context when compared to the one of the operating systems on which many of the original MVC ideas were developed. The MVC implementation has to conform to the web context.\par}
+{\pard \ql \f0 \sa180 \li0 \fi0 The web heavily relies on the HTTP protocol, which is stateless. This means that there is not a constantly open connection between the browser and server; each request instantiates a new communication channel between the two. Once the request initiator (e.g.\u160?a browser) gets a response the connection is closed. This fact creates a completely different context when compared to the one of the operating systems on which many of the original MVC ideas were developed. The MVC implementation has to conform to the web context.\par}
{\pard \ql \f0 \sa180 \li0 \fi0 An example of a server-side web application framework which tries to apply MVC to the web context is {\field{\*\fldinst{HYPERLINK "http://guides.rubyonrails.org/"}}{\fldrslt{\ul
Ruby On Rails
}}}
-. At it\u8217's core are the three MVC components we would expect - the Model, View and Controller architecture. In Rails:\par}
+.\par}
+{\pard \ql \f0 \sa180 \li0 \fi0 {\pict\pngblip 89504e470d0a1a0a0000000d49484452000003e7000001f108060000000feecd130000000473424954080808087c086488000000097048597300000b1200000b1201d2dd7efc0000001c74455874536f6674776172650041646f62652046697265776f726b7320435336e8bcb28c00000015744558744372656174696f6e2054696d650033312f332f3133614c947a0000200049444154789cecdd7b7c9b677dffff774e9c6d89524a890352d2ae4d60cc4aca9c0d3aa4b86ec7e04b64bb300a24911dda0201c776a04d4b4a2cbb4d9b5088eda484732c258172686d29c038d48d25c67ec31934326cdfa4fd5122774d60eb68a49871689be8fb8772df916cf9201f74fbf07a3e1e7e2491effbbe3eb27529fadcd7757dae79a9542a2500000000006099f956070000000000c05c47720e0000000080c548ce0100000000b018c93900000000001623390700000000c06224e70000000000588ce41c00000000008b919c03000000006031927300000000002c46720e0000000080c548ce0100000000b018c93900000000001623390700000000c06224e70000000000588ce41c00000000008b919c03000000006031927300000000002c46720e0000000080c548ce0100000000b018c93900000000001623390700000000c06224e70000000000588ce41c00000000008b919c03000000006031927300000000002c46720e0000000080c548ce0100000000b018c93900000000001623390700000000c06224e70000000000588ce41c00000000008b919c03000000006031927300000000002c46720e0000000080c548ce0100000000b018c93900000000001623390700000000c06224e70000000000588ce41c00000000008b919c03000000006031927300000000002c46720e0000000080c548ce0100000000b018c93900000000001623390700000000c06224e7d3502010502010b03a0c000000004081909c4f33894442b5b5b58ac7e356870200000000281092f36926128948922a2b2bad0d0400000000503024e7d34c281492cd6693cbe5b23a14000000004081909c4f33a150286bd43c1289c8eff7e79ce6eef7fb87ac4d8f4422aaa9a991c7e391c7e3515b5b9b128944ceb6328fadacaccc79acd17e2291308f6d6b6b1b577b0000000080dce6a552a994d541202d168b69e5ca95eaeaea321374bfdfafe6e666f5f4f4c8e3f1641d3f6fde3cb9dd6e732a7c2814525555d590ebda6c36c56231399d4ef3b19a9a1a0583c121c79696962a1289c86eb767b5eff57a150e8725c96c339ff60000000000c363e47c1a098542923424091fab868606d96c36f5f4f428954ae9cc9933f2f97c4a269359a3dd7ebf5fc160505eaf57c78e1d338f6d6a6a525f5f5fcef5ee914844c78e1dd3993367cc6b8db5bda9f4cc33cfe86b5ffb5a41da0200000080a9b2d0ea007051281492dbed3647adf3d5dfdf2f87c361ae57b7dbed0a0402723a9d590977201090dbed366f0618c7fafd7e49527373b362b158d6baf7868606f3dfc69f636d6f2afde637bfd1ee3d7bf5939ffe54773735e9d24b2f2d48bb00000000309948cea789783caebebe3eb5b6b68efb1a6eb75bd168d44c8e8db5e446d22da5a7cef7f7f7cbe974663d9e1987941e29cf4cce738de68fa5bd4278edeb96e8b917bd58755bb668ff17bfa897bef4a5056d1f00000000268a69edd384b16e7cbc53daa58b23e2c96452c16050b5b5b57ae52b5fa9caca4a33e9368ab545a3513537370ff932d6a18fa5a8db58da2b84452f7a91eeb8ff7e5df27a87dee276ebc48913056b1b00000000260323e7d3442814ca9a223e1e4ea753914844b1584c8140409148447d7d7d0a87c38ac5625909b3cfe7534d4dcd88d79accf60aa1aea9496f5cb552b7dd75976e6b68d0dbaebdb6a0ed03000000c078919c4f13c69664633538f14d24120a8542723a9d59db9d195ba085c3e1aca9eab1582ce7287d22915022911835391f6b7b13990990af050b16e8faca2a5d72e9ab55f3c10fcaffa94f69c3ba75056b1f00000000c68be47c1a0885424a2693391359a3385c2814cafa7eae75ddb5b5b572381c8ac562e67976bb7dc8df8db5e2814060c80d81caca4a45a3d19c5bb78da73d2b5c73edb5faf277bfa71d8d0dfadd99336aacabb3248ed96adebc799a376f9ed5610005974aa5c4eea3000060aa909c4f03c67af35c15ce2b2b2bd5d8d8a8f6f67673443b12890c59136eb7dbe5f3f9140c06e572b9cca43b1289281a8dcaed769ba3e66d6d6df2783caaadad55201090c7e33147c2fbfbfbe576bb474dccf369cf0aafbfe20a353df039edfee49deaebebd3ee4f7f5a975c728965f1cc26f3e6cdd3e32f9cb33a0ca0e0ae5eb8c0ea100000c02c46723e0d84422179bdde9cdf733a9deae8e85043438359acadb4b4548140402b57aecc3ad6985a1e0c06d5dcdc6c3e3e78db3497cba54824a286860645a35145a351f37bf5f5f563aeb63ed6f6acb2f8f5afd7670e7d4d9fddb64deb6b6bf5adaf7f5d2f7ff9cbad0e0b00000000869897628ede8c11894464b7db471d914e24128ac56292d289f848d3cbe3f1b8b97e7dbcebc3f3696fb2fde217bf50d3ce9dfaf4a1af0d7bcc0bcf3fafcfdfbb43bff8d77f55ebae5d436e6a203ff3e7cf67e41c73d2d50b17e8fcf9f3568701000066299273cc686349ce0ddde190befec0036adab64d15e5e505886e762239c75c45720e0000a612fb9c63cea8f056ea530f7c4e1b7c3e7deba187ac0e07000000004c24e79853965e7db50e3c7a44071f7a484d77dfaddffffef75687040000000024e7987b1c575ea93b77b7aaefc4096dbcf556abc301000000009273cc4dafbefc72dd7ff0905e7ed96bb4b6ba5aa74e9db23a24000000007318c939e6b48fdf7baf565d779d36356ed12f7ff94babc3010000003047919c634e7bf14b5ea20f7c6493deb1ee03bafe861bf49def7ed7ea9000000000cc410bad0e00980ecaffcfbb54f27d873e77778b9203035af7bef7591d120000008039849173e082abffeaafb4b9b9455f7ff861dd7ee79dfac31ffe60754800000000e608927320c3956f78837606827ae2a9a7547bcbad24e8000000000a82e41c18e4a52f7b995abef825bdf275afd33f7e609d7ef5ab5f591d1200000080598ee41cc8e1a52f7b993e7eefbd7acb3bdfa18d1ffa909e78e209ab4302000000308b919c032378cfc60fea8377dc21f79a350a7fe73b568703000000609622390746f196eb2af4957ffabebe72f0a0da1f7840cf3df79cd521010000009865d84a4d52301854e4273fb13a0c8cc31ffef77f75eedcb9296fe7aa37bd495b3fbb5bb7fb7c3a79f2a4da3efbd9296f13000000c0dc312f954aa5ac0ec26af7de7baf9efcddb3badeebb53a148cc3e54b96a8c4e92c485b7ffed39fd4fcb18f69c1f3cfa9edfefb75f9e59717a4dde964fefcf97afc85a9bf21024c37572f5ca0f3e7cf5b1d06000098a5183997b468d122bdeab257eb9a6bafb53a144c732f7ec94bf4a93d7bf4f5cfefd3a6c6467dfaeebb75e595575a1d1600000080198e35e7409e5efab297e9831fff84d65457eb5ab75bb158ccea9000000000cc7024e7c038bdfdc677eb9e2f7d49b77dea53ea0c85ac0e07000000c00cc6b4766002dcfff00e5df6dac56afbd45d7a2c1653d3b66d5ab46891d561010000009861183907266885cba5b66f7c53476331ddd5d464753800000000662092736012bcf4e52fd7bd5ff9aa4efed77fcbfbee77eba9a79eb23a24000000003308c93930496c975ca21d5ffeb24adff636bd77dd3afde637bfb13a24000000003304c93930c9d67fac4e1fd8bc596f5bb3463ffec94fac0e07000000c00c404138600afc7df58dbaf4b2d768675b9be2f1b8de7fd34d5ab890ee060000002037b205608a5c73edb57ae5a597ea131bd6eb574f3ea9168ac5010000001806d3da8129b46cf972057ef4884e3cf59fda72fbed3a7bf6acd52101000000988648ce8129566cb7ebf65dbb943c775e1faeabd36f7ffb5bab430200000030cd909c030560bbe412dd71fffd5aea72e9efdc6efdfbbfffbbd52101000000984648ce8102da50b759f53b76e893cdcdea8946ad0e07000000c0344141b871e88d4474341a5199dba3d51ecfb0c7ed6df64b92ea9afce6396355e6f6e475fc686d14d9ed5aedf66885cb35a6eb8d166fbed743dafcf9f3f5f7d537ea95afba54fefbeed3fffd8fffd047376db23aac59612cafd915a5ae11fb6c3e6d54fb6a54e2748ef8f86428c4f302000080f548cec7e16834a2bd2d2daadbae9193f3961649e9c4d93867aceab62bbfe3c7d8c6f2d2521d3ad2a362bb7dc4e3c61a6f99dbad7d9d5da35e6fa63b158f6b4763a37cf5f593920495b9dd5a7af5d5faf0da77293130a06d5bb74e3cc8396eacafd9b1f681d1da28737bcc247cb8c72743219ed7789d4d24b4a3b151d53e1f37070000002688e4bc40aa7d352a737bb21edbb1a55127fafaf4c9ddbbb5a2347b047a89d399d7f199aa36f854edf3653d36904c684f73b34ef4f5695375950e1de91953dcb9ae2549c7fb62dadbdcaca3d1a882ed6daa6bf28fe97a33556730a0eec361f9eaeb27ed9aafbefc727de1f07774ffedb76943ed46edbeffd3baf4d24b27edfac82ddf3e305314fa79758743da5a5bab816432e77b04000000f243725e20254ee790d13463846bb829a9f91e6f58e274e4fc7e99dba337bfea121d8d4675369118d308db70d75aedf16845a94bebaf2b57a0bd7dd627e753e5d5975fae4f1f38a8b6eddb75e37bdfabe8a38f5a1dd2ac70f0d123435eb7bd9188b66eacd5e9fe7e1d8d46752a1ecf7b84bbaec96fe96b7daa9ed7781c8fc534904c4e793b0000007305c9f91c526cb7abccedd6d16854c763b1094f4335cecff501bd3712516730a853fd7115dbec2af3b855edab197243e06c22911e950e872549d53e9faa7d35dadbec5789d3a96a5f8d79bda3d148cef5bc838fcd3786cce324a9c2ebcd3aae331850ef85e26d9dc1a08e4623939ea035b4b4a8a3ad55572d5fae43070ea8acac6c52af8ff4ebf5469fcf9c22fe7446127b2a1ecffa3d4bd26ab77bc8eb6d3c6bcb3b8301f546a2e6eb6ba4d7e2643f2f29fddc02eded3ade17932495389c39a7a18ff4dc8cfa19463f1bfcb332fa45ae9f57661faca8f4e6eca799ed1ad75eed7673d30f0000cc2924e773ccd94462d2aed51b894892163b1c598f6fadad55d78160d663dd87c3ea0c06b3d6c49e4d24b4ae7c8d4ef4f599c719237f7b5b5a547621394a3f1eb9f0d8d0f5bc838fcd2786ee70489baaabb38e3b1a8d6a6f73b30e3f764c254ee785c4239d8818d79c8aa4a1b6a1517ff1c637cabf73a7ea3ef421bdfd861b346fdebc496f672e3b1ebbf85a335e03c76331ad2b5f33e426d3d1685481f6761d3ad263163ecc776d79aed7a1947e2d66bec6262ad7f392d23706eed8b871d0d151751d08aa6a834fbb3a3acc47477a6e171f775f48a02ff609e962bfc83c6fb83e68fc4c8d3833dbed8d46cdeb9e4d2448ce0100c09c42723e01bdd1a87461446926e88d4474a2af4f4536db9847cd9f8ef79b4978a6ee70589dc18024e9aed656f3f1bdcd7e751d08aa62ad57754d4d5ae172e96c22a1607b9bf6b6b464ad89dd7b610d7cc55aafb6b5b6aac4e954a0bd4df76ed932a1e7994f0cf73436aac866d3bece2eadf678cc02575d07820ab4b76b5b6babb6ed6e55a0bd5d5d0782a3aef79fa86bafbf4197bd76b136bee31fd4dcd4a45b6fb965cada9acd8c91dc4c8f84c3e68da0c50e879970efd8d2a881645245365bfa75e870aa3b1c56704fbb06924905dadbb392d8b1c7103093d38ab55eb35e81918c0e2493dabab136af35e2f93cafee70c84ccc9797966a7353938a6c7605dbdbd57d38acae034115dbedda96d17fc7ca58636e24d2551b7c5ae27468c985c4dce88399cfdd78de23ad8dcf4cf8a7b29f0100004c4724e71370346394673ac975d3e078ac4fdd87d353c76bf2286ad675209873e44f4a2702bb3a3a54e1ad341f7b38184c5770efea321f2bb6dbcd11b0bd2d2d3a1e8b6985cba5ce60408b1d8eac636bea1b349048e455a97eb07c6238dddf9f95d014dbeddad5d1a1254e87f9bc56b85c5ae24ccf0e28c4965557fde55feadbfffa537dfaf6dbf4f4e9d3bafde31fd72b5ef18a296d73b619ee352b4945369b3edf79f1b551b7bd49c7fb625ae2749abff3d51e8f827bda25c99c8e9eaf53f18be7ad70959aaf9bd51e8f8a32ea47e4239fe7754f63a3f978e648f56a8f47ebcad7a48b39ee69574d7d7ddea3f7d5be1a9d8ac7cdf7bfc1d3e41f0ea6e35c5e5a6af643e3fb7b5b5a865d1bbfd8e1d0d78ef4a8c86ecffaf9010000cc0524e713305c2573c3faebca0b18cd45c3dd3428b2d954535f9fd754d132b75babdd6ef3df0f07833adddfaf8ab5deace4574a4f0f3edddfaf254ea7b94635d3d3f17e4952ef8591bf7495e79a21c755fb6ac69d9ce713c30a97cb5c83bf66d95255782bb5dae35685b7d2f2e9b4af292951c3ddf7e89337dfacbf7ae31bf5ee77bfdbd2786683229b4d754d4d43d67aaff678cc5913dde1907a2351f3353a11c60d1f299d901acb2f56bbd3afb1ccef4f44aee7752a1ed7e9fef46bbdc25b39646d7bb5cf67be47f44623aa76d64c4a2cd2c53e28a56f3e64cebc29ca882357bb37fa7c66c25e3c493f1f0000809982e47c0286ab646eb55c370d8aedf6712503838b32d535f9b5ae7c8dba0f87b5b5b6366bbaafb19e7db41905038984796cb1dd36e4fb1359839b4f0c92b46b7f87b66eacd5d168346396c0c6aca9f65638fdd453fae4cd37ebad657f4d623e0e4655f353f1b8f9fb1d4826d5190c0eb921743c16d38e2d8d933e0ba6c25ba9aa0dbeacd16ee375b9b7a5458b1d0e7dbeb32baf7e39d6e7f574c6a8b331eb235389c369fe7db247a833eb5a8c34f32657bb83b78f040000984b48ce67a1a9be69b0afb34b6b962d55d781a0aeaff4664d6b97469f51b0c4e9cc4a1ea6c2586290d237020e1de9d1f1584c9dc1a07aa3e975f9dd87c3fabf7d31457e7d724ae3cce517478fea2bf77f5aebdef36ed69c4f5089d3a97d9d5d66e1c1137d7dbaa3b6366bd6c747aaabcc91deaa0d3eadf6b8b5daedd19a2b964db8fd5d1d1daaa9afcf7a6d194ef7f76b5df91af5fcfa64de55dbc7f2bca683c1336fb2bfe7296c30000000d31cc939f266accbde545dadadb5b5eaf9b5276b64fe785f4cab3d430b689d4d24349048a8c4e934a7b73e120e0f99427e3c161b732c8347dff289c198c65ce2706ab5c7a36d17ce3d9b48e88eda5a751f0eab371229e8ec88ee7048c1d656f9efba4b6fbfe18682b53b9b15dbed3a74a4476b962dd54032a9eec361758743aaf056aa3712311373dfe6fa7115471bc9a9785c671389acebf64622dab1a55127fafa34904c8e7b5bc3919e57e6f572f53163eb4269f42439df91f5cc9900250e6756dba7e2713d1d8f4fcb1947000000569b6f750098992abc952a73bb35904c6a6f73b3a48bfba89fe8eb332bb967da545da535572c536f24a262bb5d156bbd398f35ae97a9c8dcfa2c9cf5f89e41c7e6138324ddb171a3b66eaccd9a8a5b6cb79bed4dc63ed463f550c77e7dfeeebb75e02b5f21319f64c60d25c33d8d8d43b615cc4c4203ed6d136e736b6dadd65cb14cebaf2bcfbade6a8f474b32a6952f99c0d289919e57d586f4cc91c17d213d4b24fdefe5a5170bd565ae07cfec6783fb582e03c9ecfe537661b4bceb40d0bcd9763691d007cad768fd75e5ba6ac1fc49ddd611000060362039c7b8edda9f4e0a827bdacd0fe0db76b7aac866d31d1b376a5df91aed6df66b4763a33ccb96ea68349a9ee67a2119a86b6a328fdd5a5babbdcd7e79962dcd598cebfa0b53e7837bdacd63d795afd1f1bea1a3ec638da1d86e57d5069f4ef7f76bedaa95dadbec37afdb75205df17df07ae01d5b1a73169a9b88816452f76ed9a2de1ffc405ddffeb6aebaeaaa49bd3ed22abc95aa58eb95949e521e6c6f4b574eb7a5eb1e741f0e6bedaa955abb6aa5eeddb2c57c7cbc4b30b6b5b69ad7b877cb16ad5db552ebcad7c8b36ca9b97342c55aef84eb1ae47a5e83dbbf63e346b37def35abccade38c3e2c5dec6352ba9fad5db5321d6b3894b3ddccb8b7d6d69a7d4d4af74183f79a555a57be466b57ad346729d46ddf5ed01b5f0000003301c939c6adc4e954ddf6ed92d249ab949ed27ae8488f59057d6f4b8b827bda75babf5fbecdf5da97b1d59371ec6287435d0782e9bd9f13899c7b4a97389ddab97fbf8a6c36f3d8b38944567231f8ba6389615b6bab99a01b15b58d043ef3b86a5f8d8a6c369de8eb33b7629b2c77d77d4c2f7afe393d78e080aeb8e28a49bb2e86dad9d16126acc6efd1780d4a32d76ffb36d7abaea949523ae1cdac383e56c576bb0e3f76cc4c9c4ff4f5e96834aad3fdfd2ab2d9d2afc5495a239eeb7915dbedeaf9f5c9ac1174a3e85d99dbad43477ab2a7a067f431e37863ea7c2ec6ec19297d83296b8f72974b071f3d62fe5c339f77ddf6ed96ef86000000301dcd4ba55229ab83b0dafdf7dfaf67ce9fd72db7dd6e7528b38ab1be54d2a86b4c8fc7623a9b4898c75db560be99400c664c8b1f4b95ebb1c67036913013ee152ed7b0a37a469236196b667f7de2849a366dd275eeb7a969db36bde8452f9af0350b61fefcf97afc8573568731e98cdfed48bffff1ca7c7d4993f3fac997f1fc96389d238ed61bb18eb58f197d77b8e3f3791f98eeae5eb840e7cf9fb73a0c0000304b919c8be47c3a1a29399f0d8efdebbfaa63f767f58fef7a97d6af5ba7850b674e6dc6d99a9c03a321390700005369e66404c02cf1e31ffe408d37dda4ef7eef7b7adbb5d75a1d0e000000806980e41c2890179e7f5e0f073af46f8f3eaaa3bdbd5abe7cb9d52101000000982648ce312d3d716e764d1d7deecf7fd67d1fffb892bf39adbdadad724eb0423700000080d985e41c9862c9679fd5276ffea05ef79ad7e83b93549d1b000000c0ecc2566ac014faf58913f26fdaa46bcbcaf4405b9bd5e10000000098a6183907a6486f24a2bdfe26d56fdaa4f7df7493d5e10000000098c648ce8129f0dd6f3ca8af3ff08076dd7bafca67f8dece00000000a61ec9393089fefca73fa9a375b77e158b29f895afe80d6f7883d52101000000980148ce814974dfc73fae334f3fad031dfb75e9a5975a1d0e0000008019828270c02478eac927f5a1b5efd29257daf5ad07bf4e620e000000202f8c9c031374faa9a7b4e7539f52d53bdfa90fdf7cb3162d5a64754800000000661846ce8109f869cf11bdf3afdea4f77ad7aaee231f213107000000302e8c9c03e370ee8517f4dd6f7e433f3e7c583f8e44b46ad52aab43020000003083919c03e3d0eef7ebf8bf1dd5573eff795d79e595568703000000608623399774fefc79fde7af4fea68346a7528c8d3f9d4792dbbea6a5db6787141da3b9b4868f7b66d4a9c3ea5c8238f14a44d00000000b3dfbc542a95b23a08ab3df9e493fae02db7e8c52f7eb1d5a1204f7ff8c31f747ec10205ba1f9df2b64ec5e36abd6b9bae2829d1f66ddb64b7dba7bccde968fefcf97afc857356870114dcd50b17e8fcf9f35687010000662946ce255d71c5158a1c396275181887bebe3e7d74cb96296f27fec413fac4ba75dafcb18fea83353553de1e00000080b985e41c18c53fffe887dad7d2a2a6bbb6a9bab2d2ea7000000000cc4224e7c030cebdf0820eecdda3de471fd503bb77eb6ffee66fac0e09000000c02c45720e0ce34b9fdea59f1d39a287bef10d5d76d96556870300000060169b6f7500c074f3cc6f7fab6d37dfac3f3ef38c1efee63749cc010000004c39927320c399fff91fdd5df731fdc59212ddbf63875efdea575b1d12000000803980e41cb8e03f1e7b4c6b57baf4ce8a0aed6869d12b5ef10aab43020000003047b0e61c90f4d39e23fae6e73faf43070faaa2bcdcea7000000000cc3124e798f3beb8f33e7de7e0213df8b5435ab56a95d5e100000000988348ce31673df7e73f6b6f73b34e3ff1b88efdfc677ad9cb5e66754800000000e6289273cc49cf3ef38ceedfba55af58b450fbbff42512730000000096a2201ce69c677efb5b7d68edbbf4e6bf7ca3025ffeb22ebdf452ab430200000030c7919c634e391a8deab6751fd02d3e9feef8c427ac0e07000000002431ad1d73c8771efcbabeffe083ba7bfb76957b3c56870300000000269273cc095fdbf7397dfd8107f44fdffdaeaebcf24aabc301000000802c24e798d50692493dd0d2a2f97ffaa38e74776bc992255687040000000043909c63d6fad31fffa8e68f6ed26bec767d66d72e1517175b1d1200000000e4444138cc4a4ffcf2977abffb6d7ae31557e84bfbf691980300000098d61839c7acf3f39ffc449dfbf7ebaedb6fd7bb6fbcd1ea7000000000605424e79855c25f3ba42fdc738ff67ff5ab7adbb5d75a1d0e000000008c09c9396685e79f7b4e071fd8ab9f4722fae13ffd93aeb8e20aab439ab552a994ae5eb8c0ea3080824ba552568700000066319273cc78e7ce9d53cbe6cd7a2e71465fd9b74faf7ffdebad0e6956234101000000261f05e130a32d5ab448271f7f5c4b2fbb4c9ddffa1689390000008019695e8a6130cc70dffbdef774c30d3768d1a24556870200000000e342720e0000000080c598d60e0000000080c548ce0100000000b018c93900000000001623390700000000c06224e70000000000586ca1d5010000727bf2c927f5d0430f69fefce1efa33efffcf32a292991cfe72b6064000000986c6ca50600d394a7bc5caffd8babf4ba654b873de677fffd8cce9f4daae3cb5f2e6064000000986c8c9c03c034f5e217bf58ffe7a69b54e6760f7bcccf7ff213fdf0e081024605000080a9c09a7300000000002c46720e0000000080c548ce0100000000b018c93900000000001623390700000000c06224e70000000000588ce41c00a6a917ce9dd3f9f3e7ac0e030000000540720e00d3d4cb5ffe722d58b0d0ea30000000500024e70000000000588ce41c00000000008b919c03000000006031927300000000002c46720e00d3d4c2850bb560c102abc30000004001909c03c034f5bfbfffbd5e78e105abc30000004001909c03000000006031927300000000002c46720e0000000080c548ce0100000000b018c9390000000000165b687500c06c110a85148bc5148944ccc75c2e975c2e972a2b2b65b7dbad0b0e000000c0b446720e4c505b5b9bfc7ebf92c9e490ef45a35149524343831a1a1ae4f7fb0b1c1d00000080998069edc004d4d4d4a8b1b15192545f5faf9e9e1ea55229f3aba7a747f5f5f592a4e6e666d5d4d458182d00000080e98a9173609c6a6a6a140c06e5f57a150804724e5bf7783cf2783cf2fbfde6f176bb5d6d6d6d16440c00000060ba62e41c18875028a46030289fcfa7502824bbddae442221bfdf2f8fc7a39a9a1ac562314992dfef57281452281492d7eb557b7bbbf93d498a4422f2fbfd8ac7e343daf1fbfd0a0402598f452211d5d4d498897f5b5b9b128944ce38338fadacaccc79acd17e2291308fcdbc79904f7bc06c62f48dcc3a12b9f8fdfe19bf6465f0fbd048ef4b0000608aa400e4cde170a44a4b4bcd7f1f3b762c65b3d95292cc2f9bcd966a6d6d4d494a353535f67f016d0000200049444154a552a954eae4c9932949299fcf679edbd4d4949294eae9e919d28ea494dbed36ffddd5d595d546665b274f9ecc3ad7e7f3e53cb6b4b43475e6cc9921ed7bbd5ef318a3cd7cdac3e4bbe1ed6f4f1d3ad2937ae2dcf961bf1e8cfe385573f3cd56873a2b197dc3e8bfc331fac54c36f87d68a4f72500003035183907f2140a85d4dfdf6f8e942512095556562a994caab5b555a9544a274f9e94d3e934d7a3bb5c2e4992d3e994d7eb1d75246e380d0d0db2d96ce6daf63367cec8e7f329994c668d76fbfd7e73cafdb163c7cc639b9a9ad4d7d7a7cacaca21d78e44223a76ec98ce9c39635e6baced010000009818d69c03790a854272381c6682dbd6d6a6fefe7eb5b6b6aaa1a141523a090f04025ab972a5a4f4da7383cbe552381c1e57dbfdfdfd72381c66b26fb7db150804e4743ab312ee402020b7dbad5028643e66b7dbcd1b0acdcdcd8ac562e675a474226efcdbf873aced0100000098189273204f8393dab6b636d96c3633313718c7381c8e49dbe3dced762b1a8d9ac9b1b1963c73bd6b2c16537f7fbf9c4e67ce75b0996b4a339f47e60d847cda033054241251201030fb5b6565a56a6a6a72be17641e6bb7dbcdba1599c7462211452211735bc6783caecacaca21ef3b83251209b3e685512bc2e57299fd1900004c1f24e7409e32a785c76231259349f97cbe21c7191f84077f008ec5622a2d2d1d57db8140403535358a46a30a06830a0683aaadad95d7eb555b5b9b9c4ea7d96e341a35f759cf652c45ddc6d21e26cfe9d3a7f5fcf3cf9bff7eeef9e7753e757ed4f3fefca73fa9bfbf3febb157bdea557ac52b5e31e9316274a15048555555598f45a351f9fd7ec562b1ac7e63ece290291c0e2b100828128998097a24123167bc64cebc1929398fc7e3f2783c435e1bd16854edededeae8e8607b470000a611d69c03136024b8b99254634a79e6e8743c1e57381c1ef78895d3e934d786d7d7d79b497eae6bfa7c3ef5f4f40cfb35960fe5f9b48789f9d18f7ea43797add67bd7add77b376cd07b376cd01f9f7f5e975ef69a11cfbb7cc9129dfe9fffd1ad759bcdaf775655e9073ff8418122c76085ae0d31521cfdfdfdaaafafd7993367ccebb7b6b69aed030080e9839173601c8ca4dc18d5cab5dd90f1c179f0baee5c53e073197c4d637aaad3e9ccdaeeccd8022d1c0e674d558fc5623913e84422a1442231eaa8f758db23499f1cd75e7badfee2eaabf4f737dda4f77cf0e6319f57e274eacbdffb27f3dfdffdc683fae1d71fd4bbdffdeea908136350e8da10c3310a506626f176bb5d0d0d0d0a854223ceac0100008547720ee4c9ed769bd5d65d2e971c0e8742a190f9213a9148a8a1a1417d7d7d92d2d3da8dc7c2e1b03a3a3ab2126323c10f854259896eae51addada5a391c0ec56231f33cbbdd3ee4efc65a71635a7aa6caca4a45a351f5f4f48c9a588fa53d4c8e97bdec65faea17bfa85b376fd6cabf7d8bae7cc31bf2be46ffaf7ea5ef1c3aa4073ef3992988106355e8da10c3193cb21e8944944824148944148bc5f2794a0000a00048ce813cb95c2eb5b7b72b1e8f9b1fac6b6b6bb572e54ab9dd6ef343afc3e1507f7fbf5c2e97e2f1b892c9a4eaebeb7326cb8d8d8d6a6f6f3747b48d0fd199ec76bb7c3e9f82c1a05c2e97799d4824a268342ab7db6d7e886f6b6b93c7e3516d6dad0281807983c0d806ceed768ffa213f9ff63039aebcf24a7de01fff517bfd4d6affd6b7f33af78f7ff883b67ff8c3f2bdff7d7ac338127b4c9e42d78618e9dcb6b63605028121ebce0100c0f443720ee4a9a1a141edededaaa9a9512412514d4d8df921381a8d9a1fc063b1986a6a6ad4d7d7a7d2d252f9fd7e5556562a91489845a18caf8e8e0e3534349885a14a4b4bb3b66233182361c16050cdcdcde6e383a7c6ba5c2eb3b2f3e00ffff5f5f5635e6b3ad6f63079d6bffffdfaf13fffb31efce217f4be0f7d78cce71dd8d32e6749893e4881af4963cc0c19294136be67b3d9ccc78c1b6cb158cc2cecd6d7d7a77038ac582c96b564c5e7f38d58ff612245178d59320e87435eaf572e974b4ea7532e97cb7c6f000000d3480a40deeaebeb5392523e9f2faff34e9e3c992a2d2d4dd96cb6d4c99327877cbfa7a72775ecd8b151af73e6cc99544f4f4faaa7a72775e6cc9951db348e1daf7cdac3c4fde637bf49151517a70e3f762cf5c4b9f3a37e7deb5ffebfd475ef7847eabffeebbfac0e7d56e9e9e949494a9596960e7b4c5757574a52caed76a752a9745fe9e8e818d2dfce9c3993f27abd2949663f1ae9da67ce9cc97a8f686a6a32cf1d8b63c78ea524a5bc5e6fceef3b1c8e54e64780c1d7cfb73d00003071546b07c6a1adad4d5eafd79cf23dda2872229190dfef37a7b84722919c23621e8f674c53c58dbd903d1ecfa8ebbe8d826e1329dc964f7b98b8cb2fbf5c5da1903ed7d2a2677efbdb518fffcc1d77684b5d9d2ebbecb202443777783c1ed96c36f5f5f52910080cf9bed1af2565157aabadad3567d41886ab0d31dcb52b2b2bb574e952b3be45be0617adcce4f7fb99e60e00c034c4b476609c42a19039c5bdaaaa4a369b4d2e972b2b0936a6b01bd3478de9eaacd5c668ae5bb3463fecee56476bab6edfb52be731e7cf9f577b53935695fe95def1f6b71738c2b9211008a8aaaa4ab5b5b56a6b6b3393f0783cae5028a46432a9d2d25273078642d78690d2c5e51a1a1a54535363b667dc580806834a241266b14ae3da369b4dc964528944821b6e00004c17560fdd0333ddc9932753f5f5f5e634d15c5f6eb73bd5d1d16175a89861fefbbfff3bb5fee65b525f0887734e67ff5a4f2475d58a15a964326975a8b35a4f4f4faab4b47448bfb6d96ca9fafafa214b3dce9c3993f2f97c39df07061f7becd8b194dbed1e72ece0eb8e34cddc987edfd4d434e4da83df971c0e47aaababcbbc5e575757ceeb33ad1d0080c29b974aa55285ba1100cc0599d350ed763ba3e498905ffef297bae11ffe413f7afc09bde4a52f351f3ffdd4536afee8267dbab9596f7ef39b2d8c70ee3066c24863ebdb99c7bb5cae1147a8e3f1b859286e224b507289c562e60839ef4700004c5f24e70030cd35df738f624ffcffbafb0b5fd08b5ff2124992ffa31fd51b9c0e6ddbbad5e2e8000000301928080700d35cd35d77e98fcf3eabef7ffb5b92a41f3cfc909e1f38abba8f7cc4e2c800000030592808070033c0fdf7ddab3b9b9bf5ead7be56f73534e8c7d1a88a8b8bad0e0b00000093849173009801def4a637e95d6f7fbb9a376dd28efbeed395575e6975480000009844ac39078019e28f7ffca39e7aea295d7df5d55687020000804946720e0000000080c598d60e0000000080c548ce0100000000b018c93900000000001623390700000000c06224e70000000000588ce41c00000000008b919c03000000006031927300000000002cb670322e326fde3ccd9b376f322e05cc28a9544aa954caea300a8afe8eb96aaef477fa38e6aad9d0c7e9bf803526ebfd63d292f3c75f38371997026694ab172eb03a8482a3bf63ae9a2bfd9d3e8eb96a36f471fa2f608dc97aff605a3b00000000001623390700000000c06224e70000000000588ce41c00000000008b919c03000000006031927300000000002c46720e0000000080c548ce0100000000b018c93900000000001623390700000000c06224e70000000000588ce41c00000000008b919c03000000006031927300000000002c46720e0000000080c548ce0100000000b018c93900000000001623390700000000c06224e70000000000588ce41c00000000008b919c03000000006031927300000000002c46720e0000000080c5165a1d0000000000cc35c763319d4d242449ab3d1e6b83c1b4c0c8390000008019695df91a5db5607eceaf75e56bd4190c4cb88dbdcdfe095f2353a0bd4dd75cf24a79af59a5f5d7956bfd75e5ba6ac17c6dadad359375cc4d24e700000000669da3d1a8eed8b8515b6b6bc775fef1584c9e654bb5b7a565d2620ab4b7e9de2d5b34904c0ef95ed781a0d695af99b4b630f3909c0300000098d1969796eae0a347ccaf4feedeadc50e87a474d2db1d0ee57dcdee7048a7fbfb2735ce407bbb196fcf93bfd613e7ceeb67bf7b56551b7c92a4137d7de38a15b3036bce01000000cc68c5767bd6baedd51e8faa7d355abb6aa54ef7f76b4f73b32abc95e6f7bbc3217506823a9b4c4f235f51ea524d7dbd4a9c4e49526730a0de68d43c7e6fb35f254ea7aa7d35633a7f3846b2bfdaed318f2db6dbb5adb555a7fae39294736a7b6730a0ee505867930915dbecaaa8f49ab1641e732a1ecf8a73b8c7331f5b51ead28e2d8d2a7138b5adb555c576bbce2612e936c3e1119fdfa9785c81f6761def8b49922abce9b88aedf6117f0ec86d5e2a954a4df422f3e7cfd7e32f9c9b8c788019e5ea850b74fefc79abc32828fa3be6aab9d2dfe9e398ab66431f9f8bfd775df91a1d8d4655e676ebd0919e21df37a6914bd2cf7ef7ac8aed76ed6df6e79caa5e64b3e9f063c754e2749ad7cd64b43196f387b376d54a9de8eb33af57edf36525ea839d4d24b4a9ba6a482c9254b1d6ab7d5d5da3fe2c723d6e3cb6d8e1d04022614eb3ffd9ef9ed54022a1b5ab560e997a3ff8f91d8fc5b4ae7ccd90e3969796ead0919e3995a04fd6fb07d3da01000000cc4a2b4a5de6df8deae8c6d4f2aa0d3e1d7cf4887c9beb254903c9a41eb930a5bcdae75399db6d9e5bb77dbbaa7dbe319f3f9c6dbb5bcdbf1b6be2d75cb12cbdb6bdd93f64d47c6f73b39998d76ddfae838f1e51ddf6ed92a4eec361ed686cccff8792c118c92f73bbb5bcb454c576bb7634366a20995491cda69dfbf76b5f67a78a6c360d2493dad3dc6c9efb91ea2a0d24935a5e5aaa7d9d9ddab97fbf8a6c369de8eb9b705c7315c939300d3c7fee9c6ebbf34e2526b942e76f1209dd71e79d3a776e6edd4507a623fa3930bbd0a767ae5d1d1daadbbe5ddb5a5bb5dae3d1b6d68b09f3c085df67b5af46ab3393f326bf39257c2ce70f67b5c7a3f0cf1fcb4afca57492bcb7a5456b57add4a978dc7cdca8365fb5c1a7ba26bf567b3caa6bf29b6bd427a31afda1233de6d7d94442dd87d353d9eb9a9a54edab5185b752754d4daa58ebd512677a1d7f6f246226f6bbf677a8c25ba96a5f8df9b3e83a109c705c7311c939300ddc5a5fafcfecdc29fb244fff7989ddae5d3b77aabebe7e52af0b207ff4736076a14fcf4cc576bb9948768743dad1d8a8b5ab5616ec7c495ae172e9d0911efdec77cf6ae7fefdaadae05391cd26299da41ba3cebd91883965bcdae7cbba86f1ef816452bd91485eed675aec706885cb653eb7e3b1d8c53833661dd4d437685f5797ea9afc92a4a3d18b6d768743e9a9fecd7ef5462e4ebf9f485c731505e10a24d0de66de49335ed4b918c51924c957dfa0e3b198f9e2aff6d58c5a640233cf8f8f1ed5771e7a684adbf8f6430fc9e7f3e9affffaafa7b49d99e8543cae47c2211d8d44cda22eabddee59dfdf7a23919cef2dc33d8e89a19fcf7c99ff3f1b06ff7f7e2a1e1f328a55e6f66415a99a2cc6becb830b3f8d157d7d62e8d3338751a84c929984ee686c54704ffbb8af39def34fc5e33ade17d3f1584c754d7e15dbedaaf6d55ce8c31de63a7063e4ba10964c42df9fccade6e63a92f302391eeb33a7770cf71ff5d944c25ce3b1d8e1505d935f47a311f3055f3642b108cc4ccfbff0826ebde516dddedaaaadef7fff94b573e7eeddbaf9965bf4d8cf7fae050b164c593b33cd70055d8e46a3dadbd2a2baeddb47bc9936158cf7816a9f6f4a3ed01b867b6fe13d67f2d1cf6787ce60704841a6c1496d6f46ff31d46dd7d424e7663f758f2b39a7af8f1f7d7a66c9dcbaacd86e5777386426d6156bbdaaaef16945a94b6bae5836a6eb4de4fcde6844776cdc28297da320b37abc941ea9ce7c9fc94c9c8d4aeeb9fe3d5a829dabfafb70328bb865b661dc7c2c737bb4c2e55251c67146a13d4c1cd3da0be4fa4aaff9f7ce60ee3518dde1903975e5fa419d15b3d38eb6365df29ad7e81def7bdf94b653f1fef7cbfeea57abbd7dfc7789679badb5b5591fa2979796aacced36f74495d21f7e8dd1a942e80e87b466d952d669cd32f4f3d9ab37635aa7a4ace99c98bde8d3d3d3d94442bd9188f9d5190c685df91a735df4e6a62649ca9ab6bdb323bd563a9fe47522e76726e35b6b6bb3f633ef0c06cc9937c67af412a7d3fc5cb2a7b9d96ce76c226116662b73bb87dc5c330adf197f37aac38fc50a97cb6c333367d9d3dcacbd2d2d5a7f5db9a4ec5c2573c6d0baf235bae692576a6b6ded98dbc4458c9c174885b7d2ac7298ee881d438ee90e5d9cc25273619d515d93bfe02377288cc7fbfbd57adf7dfac6bffd9bf9d8ef26b98d3f64fcfd8e2f7c411f282bd37bdef31ebdee75af9be4966696de48c44c809797966adbeed6ac91adcc6d57f6b6b4c857df50903bc2c763b121db916066a39fcf4e8b1d0e9deeef576f249a356a6d24ebc6f731fbd0a7a7af137d7d66e23858d5069f99181b53dba5f4b6664b9cceacd1eaa7e317fb6ee6e8f0da552b753691d05d19c5df463b7fb062bb5d75dbb76b6f4b8b0692496daaaece795cddf626f3efbbf67768fd75e53adddfaf35cb966a85cb657e5e28b2d9b2aabf5778bd3a1a8d6a2099cc8acdc841c66a735393eed8b85147a35179962d55b1dd6e26f8becdf52ab6dbd36befd77ad57d38ac7bb76c516730a8b38984f9deb7c2553ae6f67011c9790155782bd575206826e89977cf322b232e2f2d1df3facff49dc1a04ef5c7556cb3aba2d29bf54161b8356999d7adf05666bd514d741d1b46979274eb473ea2dadb6ed3eb965d9806356f9e2e9d376ff21bbb70cdd75d71856a1a1bf5d18f7d4c87c3855bcb341d0533462176edefc87afd4be9a227038984f6b6b4a8c866d3d16824abbf9e8ac715686f37d7b195389c39a7a10feebfc6f62ba7fae32a7138b5b9a9c9ecd39dc1807a33fe734f4fa18d98fd7ef0b58ce357bbdd5937f0c61adb788df69e93eb790f17eb6c473f9fbdde50ea4a27e71923e7a7e271f343a9f1fde1e4d34fcf2612ea0c06d47de1f759e1f5aaa6be61c4f8c6d24f913ffaf4cc63ec239ef9faaff056cab7b95ec13ded3adddfafd3fdfdaadae0d30a57a9eeddb245dde190ce265acdf5e081f6f47146729acff9b9d435f95564b79bd7cd946bc060b5c7a3838f1ed1d68db53adddf6fde0858ec70e8f39d5d599f61d245eac23a1a8dea747fbf061209eddcbf3fe7b29c91189f59f636379bcf514a27e69995e9777674684763a3ba0e04cd9f4f91cda69afafa51dfa790dbbc542a959ae845e6cf9fafc75f60bb87d1748743e61db2aa0d3eedeab8387ade190c986b503eb97bb7f982ce5c137bf0d123599d756b6d6dcee9afcb4b4b75e8488f8aed766daaaa52f7e1b08a6c36fdfcd933e63146c10929bba31d8fc5e4bd66d5903890dbd50b17e8fcf9f3799ff7d56f7f5bf7fafd7ab8af4f0b1716ee1ed9f3cf3da7f7ba5cdab56387aaaaaac6758dd9d0dfaf5a905ed153e676ebd0919e9cc79c4d243490480cb92196d957071bdcaf33fb6fd506df90fe5a64b3e9f063c754e27466f5c94c46bfcfbc5699db6d1ebbbcb454871f3b36a1d832df5b26fa9e33f81ac3c53a13e5dbdf676a3f9f0d7d7c2a64f6d14feede6dceaee979f2d72a713a87fc3f6e7c7f70ed8a7cfae9d94442ebcad70c9992babcb4d47c6cf0fbd878fae9e0be3e578dd6c767429fa6ff8edda9785c4fc7e35ae2748e5a73c1a83abec2e532fb503ee70f2773faf958ae631c5f6cb70f1958c8755c66bce395ebb90f76369130a7fb4f469b33d1787382c158735e40c6d47649596b4ca4ec29ed63b9bbbdb7d96ffee75bb1d6ab838f1e51ddf6ed92d2d37a3655a7dfbc2b2eac75cfdc66e16c2291950464def9cf8c8b75ef53e399b367b575f366357fe52b05fdcf5d9216bde845fad417bfa88fd5d5e9f7bfff7d41db9e2e32b7f5583d688fd14cc576fb90ff24bbc321f343f5f2d252edebecd4c1478fa8626dba9f751d089adb9f0cd67520a8baeddb75f0d123e65ab28164d22c5453edf365ed795ab5c1a7baeddb731679c9ecbfc6362713896d2cc6fa9e339658e702faf9ecb6daed31ff6efc1f6aac372fb2d9867dade7db4f7734365e1cadbbd0ef76eedf3fa46abc61bcfd14a3a34fcf3e254ea7567bc6560c71b5275dcc3933e9cce7fce1ac70b9cc6b8fe53ac6f12325e699c74d46929cebb90f566cb78fe9388c8ee4bcc08cc4fbe2daf3ec29ed156bbd637a513f1cbcb85e765f5797567b3ce9f5e917fe133e1a8dea543c9e3515d79812777450019b137d7de65dbb47c243a7d663f2a42435de79a7d6ac5d2bd7dffead2531acfcbbbfd35bfffeef75d75d7759d2fe4c76cf850fcd45369b0e1de95185b752ab3d1eedebea3213ebe09ef69c1f9c7d9beb55d7e4d76a8f47bbf65f1c1933a6b556fb6ab26e1654fb7caa6bf2e7ec878b1d0ef53cf96bfdec77cf9af5292612db588cf53d672cb1ce76f4f3d96f85cb65de6c3792722349cf4cdc07cbb79f1a9f13163b1c66bfabf6d5644d2bcd34de7e8a91d1a701140ac9798155fb7ce6df3b03e9ff44332b1c566454751fcef158ec62b18552575665caccc215bdd1888aed76f33ffcc177f797975e2cd4905e1f9330efd05fef1d3d0ee4ef91de5efda0b3538dbb76591a47fdfdf7eb6b0f3ea8c71e7bccd2386692ccf5a415deca2137d132fbf6e00acee9732ef6a989def8bad1e75389d3694e6b9b686ca3c9e73d67b458e702faf9dc6024e1bdd148561f2cf3e49e91936f3fcd2c10397826dbe0ed97a489f5538c8c3e0da05028085760c6f604a7fbfbd57d387ca1d04b3a492fb2d9c634a53d73bb86ae03c161b75d32ee8e1b951b4ff4f5e9543cae472edc89373e589ce8eb1bb2fd4baefff831710db7dca23bdada2c9ff263bbe41235df7fbf6ebdf556fdec673fb3349642cb9c267e3c36fcd622a7e2711def8ba9cc9d9ea2f574c668d312a763c8f1250e67d6b953a96cd0c8dc54c796ef7b4ea6c1b1ce05f4f3b9a1cce356f7e1b04ef7f767dd645fedf6e4dc5629df7e9af9ef62bb2debd85cafad89f4538c8c3e0da05048ce2d70bdb752c13de975a6c1f6b6acea8ff92a73bb875d376b7c28bede5b6916a6e90c0632eedc7b556cb7a593f38c3be98b1d8e3933c255685ffdd297e4adaed65bdffe76734aa4159e7ff65935df769bbefffdef5b1683558c3d438d4acb466195c1f634379b1f6ef77576aac8c61a2a696cef39731dfd7c6ec85c57fe70c65ec02b5caeacda1656a09f4e2efa3480422139b740b5cf6726e7818c2d9dc6ba1e3333712e7138876ca3f4743c9e5575b5c4e9342bbb667e80308a36ec6d69c9da1286427053e76fffe66f54e9f5aafdce3b75d7be7d96c4304fd29edb6fd74d37dda455ab56591283d56ef4f9cc3d467734366a5b6bf69627dde150d6a893317a6e78241c1eb2255877c6163785fef09bd9dfa722b67cdf73e63afaf9dc90f99a37a7b48f506432df7e9ad9ef06cff231aa2267a29f4e1dfa34804261cdb9058ca9ed92ccf564f98c5667ae23ef3a1034ff933e9b48e803e56bb4feba725db5607ed61437632d9b396a7ea1326c66519bcc11754c9dfb77ee544f57977ed1db6b49fbfdfff22ffad1f7bfaf7beeb9c792f6a783ba26bf5973a1eb40506b57add48ec646ed6df66b535595b9e5a194de06c948ccab36a4fbd189bebeac69acc76331f3dfcb4b4b27e503f04072e8b4d8914c656ce379cf99ebe8e773c3e0647ca41d20a4fcfa6966bfeb3e1cce4ac8776c19baf302fd746ad1a7011402c9b9456ecc28fc92ebdfa3d9b6fb62a556ef35abb4ae7c8dd6ae5a6926d899098534b47a6c66c19acce9f445361b77d6a798cd66535b6bab5a6ebd552fbcf04241db5ef4fcf3fac4adb76acf9e3d2a2a2a2a68dbd3cda1233d66827ebabf5fc13deddadbd262ee9c205dd8ce2c63f4695b6bab7933eb8e8d1bb576d54aad2b5f23ef35ab34904caac866cbaac49eafcc42715b6b6bb5ae7c8df636fb873d3ed354c796ef7bce5c473f9f1b0627e3a3cd4cc9b79fd66d6f32ff6ef43bcfb2a53947ce25fae954a24f03280492738b0c2efc369642709956b85c3af8e8117304fe6834aad3fdfd2ab2d954b77dfb90e97299a3f55276b2be7a98441d53e77d37dda4d7bdf6b53a98b11dce9be6cfd79be6cd9bfcaff9e96e3e4fd2b73ffb592d753a75e38d375af4cca78f62bb5d871f3ba69dfbf7678d7e15d96caa58ebd5cefdfbb5aba363c8393dbf3e9935fa65ece35de676ebd0919e09d56ba8f05666ed819eb947f8589ecf54c696ef7b0ee8e773c1e0647cb49bdbf9f6d3d51e8f76eedf6f26f447a35115dbed3a74a427e7f5e9a7538b3e3d3cabeb2c0c763691506f2452909922bd91c88c2fb4782a1e576f2432ec8dbfe3b158d60e10c657aee38d6b59354be76c2231ecf39809e6a552a9d4442f327ffe7c3dfec2b9c98807e360ac259346ff6080c975f5c2053a7ffefcb8ce3d79f2a456bdf9cdfae6638f69b1c3a137cd9ba749e88e59ce48ba64de3cfd3295d29fe371dd70cd35faf9cf7f2ee704b6f2a2bf5f647c1859e2744e787bb44cc76331b350dd7813eaa98a4d9abbef39e3e9ef33b19fd3c70b279f7eda1b89e4f59e3057fbe9448ca58f4ff73e6d45ffddd1985e66b12de3a685d57a2311adbfae5c071f3d32e6d7fff1584c3bb6340e7bf36b38572d983fe36f7e6daaaa52f7e1b08a6c36fdfcd93343bebfae7ccdb003068b1d0eddd5da6a0ef0ed6df66b6f4b4b5e3ffbe18cf777b276d54a6d6e6a2ae8a0e34472824c14849b054aa6e0c337a6ded2a54bf5894f7c42f77df4a3dafbddef4e695b2f9574dba64dbafdf6db27949823db547de09d8cdd12a6f2c338ef3963473fc748f2e9a7f9f669fae9d4a04f6733ea25f4fcfaa4d5a14c58773894d78cb5d9e2543caeeec361b37874673030ec8cde838f1ec93eb73fae1d8d8dda5a5babc38fb926fd3d67bcbf936dbb5bb57563ed9082be3301d3da010bddfe894fe8b7274fea91871f9ed2767efaed6febe9fffc4f6db9b0a51e80c2a19f03b30b7dfaa21d5b1a55edabc999008d36557a38c614ea7ca7451be78dc48829dfeb8ff53ce398f15ec7988e3fd6e73119d3b78d62949fefecd26287439d193b3b0db6dae3c9faaaf6d5685b6bab0692493d120e8dabfdf13e17e36795eb3ca3a866b0bd6d5c315989e41cb0d0a2458bf4d52f7f59bb366f9ed2766e6f68d017bef0052d5ab4684adb013014fd1c985de8d369c763311d8d46876c057c3691d0a6aa2aadb96299d65f572eef35ab462c649879deda552be5bd6695d65f57ae35cb966a4763a3ae5a307fc464f56c226116565c7f5db9aeb9e4953ade17cb798c11d3faebcaf5e6575da2c085e4cd988a2da5a7a91bc558473befe2f5935abb6aa579cce0e73b96eb7406035ab36ca9f9fd6b2e79fae554b7000019474944415465d6ae0e13f9d98ee4e16050656eb74a9c4edde8f3e968349ad71afa128753923490e7cd94d19ecb70bf1329bd94e2cdafba64c49f414d7d7dd696d53305c93960b1b7bce52d7ad73bdf3925d77ec9853fdff18e77e8ad6f7deb94b4016074f4736076a14f4b9dc1a0163b1c43a6326faaae526f34a2baeddb75f0d123dab97fbf8aed76ad2b5f33e2a8f3a6ea2a9d8ac7f5c9ddbb75f0d123aaf0562ab867f4e46a5375958ec762dab97f7f7a9db3dba37b07cd36d8d1d8a8a3d1a819d3bece4e2d2f2dd5bd5bb6e8543cae32b7c72cc85ab77dbb59ec71b4f30c469cfb3a3bb5afb35392b29eef68d739158feb8e8d1bb5daed31bf5fe274ea8e8d1bb37e66e3fdd90ea73b1cd2e9fe7e73cb65633a7b3e49edd1684452fe4bf2467b2ec3fd4ef636fb15dcd3aeaa0d3ef3bc8144421fa9aecabafe6ab74703c9a4bac739a26f15d69c03d3c0becf7d4ee7cf9d532291907d12d7c6fc3991d0c68d1bb56fdfbe49bb2680f1a19f03b3cb5cefd3c7fb627a43697642668ca60f2e0656e1add49a654bd5190ca8a6be61e8b52e9cb773ff7e33415cedf1682091c8dae274ace71905ce0cc576fb90a26d4536bbd65f57aea7e371adf67874341a4927d019c78c769e716362b1c3a143477acce9fd2b4a5d5a73c532f3f98e761d43758dcffcb9ad2875a9f742e23b919fed483a03c1f42e35170aa795389d2a73bbd5190ce42cf037787bd7de685447a3512d2f2dcdabf8da589f4baedf49a03d9d9867eea8536cb7eb915058a7327e27254ea78a6c361d8fc566d46e5424e7c034b068d1227df5ab5f9df4ebdaedf629b92e80fcd1cf81d965aef76963243893914ca693aa48d6f78aec761d8d44732690c6e8e6e024aabac63762726eb437da7946a269ec6270bc2fa6eef0f0d7cdf7bcebbd9559ebee4b9c4e2d2f2d557738ac9afa8651afb3c2e55291cda64dd5d52a73bb55e1f5ea7a6f655661b6f1fe6c876314822b73bbb3a684af2875e968349ab3309c31cddcb0d8e150d5065fde95fac7fb5c7a23110d2493babed29bf57885b7326702bec2e5526f34aababca2b316c939000000800933d61d0f4ee20c4b46a9e63db8b05c916de41909467ba39d773c16d347aaab74babfdf7c6cb1c331e2b5f339afd86ecbf1d8c51846bb4eb1ddae43477ab4634b7afafbd16854f76ed9a232b75bfb3abb546cb74ff8673b98b19efd6834aaf5d795e7f87e704872fec4b9896f15264dfc7532daeb622623390700000030697ef6bb67f3dac2aae8c2b199d392a5f4565d6339ef6c2291d5de40f2e2fa6ba3185b89d3a9cd4d4d2a7138b5c2e5d2f1582c67523a9ef3ce269239cf5fe2708ef93a2b5c2e1d3ad293ae5e1e8da83b1456f7e1b0763436664de1cef7673b9c407bbb163b1cdab5bf63c8f782ededea3e1cd6f1586c52b6771dce789f4be6efd730d5b1160a05e100000000e4657969a99e8ef7673d664c2d1eaecaf870c5b9ae1fe6bc91b6f592d245bf729df748e8e294f1e3b1980692496ddbddaa6a5f8db9cdd6e0e9d483e573dee06dc48ec7623ad1d7a7328f7b4cd7e90e8774cd25af346f4e54fb6ab4afab4b656eb7798362bc3fdb5c3a83010d2493aaa9af1fb23dda6a8f47754d4d92f22b0c978ff13e97d51e8f8a6cb6acdfaf949eeeeebd66d590eb3d1d8f6b45e9cc4ad8193907000000909715a5ae215b96ad70b954e6765fa842deaf0aaf5703c984f63437eb445f9f7c17b65deb8da4d71a1b85be4a9c4ef936d76b6f4b8b9e8ef76b89d361161b1b31868cf6062e54f8ee0e87b3923b638af48e2d8ddab63bbd36ba331854d781dc897f7738a415a5aebcce1bb89054faeaeb75aa3fae1d8d8d2ab2d954edab31a7708f749d15a52e0d2493fa487595363735a9c866bf580cedc2bafef1fe6c73316e7a0c9eb69ef9734daf990fe96c22bff5e46331d6e762307e27254ea76aeaebcde9f0d53e9f4ef5c7b5a7b939abb09d944ef44ff7f76b85ab74d2e39f4a8c9c03000000c8cbf5955e9de8eb1bb227f6bece2e55acf52ab8a75debaf2bd7a6ea6a9d8ac7b573ff7eb332f7d16864c87ae36dadadf26dae577738a4bd2d2d3a9b48e893bb778f1ac7becef408f3de9616adbfae5c9dc18039f22ba513ff9dfbf7eb445f9fb987786ff4ffb577ffb17197f701c73f0e512bb58d7d6a379692b43ea06b93fd639356c91f68f525044d93567cb82d432d6027acd58a08094c2a8848217607195b951082e868bb62277453a7e2d8ec47d5362467893f9a4880bd3f9ab015b05b12551a6dedc0286d20b73f9c3b7cb1e338e1ecc73f5e2f2922b6bff7bde78cbe8ede7e9eef738578b4bb3b96d4d59537665bdf9c2f6fcaf6707bfb941f17311ab9af0c0dc6cdd7ac8b7b366e8c2567ee21afcd64a6749ed231c70707e3b69696b8f99a75b1a7a3235aefd85c11d917fbbd1debf8e0601ce9eb8bf5d7354fbaa4bca5b5755adf8a6c2aafe5ecff2711119beedb1ead776c8efd7bbbcadfef88a8d82d3fe2dc9b0cce7635c562b1f86e4fb268d1a278e1adb7ab311e98533eb1f892387dba3a9b63cc15ae7716aa8572bdbbc659a8e6c3353ed3d76fee8acba36df3e60977d62eed4c1e11156f97359193c3c3f1daf0f0b8f74c3fd0db13b7b5b444efb3cf9df77ee2a3fdfd717278385636364e189d278787e3687f7fd46632e73cd744c74ce57125870b858898f8f54ef53ca5739ceb75449cff7b7bd3bab5f1c4c143938e75b638df6b39d7f7ed7cdfcfdbaebf3e96643215f7eb4fa76afdfc10e7f02ecc877fc82f94eb9d856aa15cefae7116aaf9708dcff4f5dbddd5190fb7b747e1a597dfd5798ef6f747f32757c5bd3b779643ffe4f070dcd6727d1cedef8f677ffd9b6a0c7741287ddfe64a9c4f87e38383b1f6ca2be2d08b2f8dfb85cf7411e7300bcc877fc82f94eb9d856aa15cefae7116aaf9708da7b87e6f5ab7365a5a5bcf79fff2859ce7485f5fac686888da4ca6bc91dadf7de73beffadc0b49e93dcbe7c3cee517ebee0d1b6279b67ed2fbeeabad5a3f3fdc730e00005c9447bbf7c7c9e1f16f6d7531e7b977e7cef252eef5cdf9d8f7f441617e815636362ee8301fbdb5a16146c3bc9acc9cc3bb301f7ecb7ea15cef2c540be57a778db350cd876bdcf50b6998390700008079429c0300004062e21c0000001213e700000090983807000080c4c4390000002426ce0100002031710e000000898973000000484c9c0300004062e21c0000001213e700000090983807000080c4c4390000002426ce0100002031710e000000898973000000484c9c0300004062e21c0000001213e700000090983807000080c46a8ac562f15d9fa4a6266a6a6aaa311e98538ac56254e1129a535cef2c540be57a778db350cd876bdcf50b6954ebe74755e21c000000b87896b50300004062e21c0000001213e700000090983807000080c4c4390000002426ce0100002031710e000000898973000000484c9c0300004062e21c0000001213e700000090d8e2d40380f9a6502844a150885c2e17b95cee9cc76ddfbebdfcdfd263a6eaecc7643299d8b265cb799f2b22a2adad2db2d9ec058d95345e7cf1c5f8fef7bf1f8b169dfbf7a8a74e9d8a65cb96456b6beb0c8e0c00806a13e75065854221dadbdb2322260dded231a5d02e7d3c15133da6adad2d3299ccb8637b7a7a2a8ecbe57215713e95b192c6ad5ffa527cf88f3f1e1fb9e2f2731ef3ab5ffd3afee7e597c53900c01c27ce6116686b6b1b17c75bb66c89818181d8b56b573436369ef3b1757575313232123d3d3dd1d6d636eeeba5d9f5d271cc1def7def7be32f6ebc315637359df398679f79267eb86fef0c8e0a0080e920ce6116c866b3e5d9ec92d22c786363e3a4b3daf97c3ebababaa250284c18e73d3d3d515f5f1fd96c36fafafaaa386a0000a05a6c0807735c369b8dfafafae8e9e919f7b5fefefe181a1ab2641d00006639710ef3403e9f8f919191719bca953ecee7f3333f28000060ca2c6b87695228142a76499f4eb95c2e76efde1d3d3d3d15b3e49d9d9d11311ae70f3df4d08c8c050000b870e21ca6495f5fdf8cdde39dcfe7a3aeae2e7a7a7aca113e3c3c1c030303d1dcdc3c23630000002e9e388769d2dada3ae1066d256bd7aeadeaf3e572b9e8eded8dc1c1c1c866b3e57bd0dd6f0e0000b39f38876992cd6667348cf3f97cf4f6f6464f4f4f6cd9b2a51ce7ee379fbbde7afbed387dfaedd4c300006006d8100ee689d22f024a9bc0150a8568686818f7166dcc1def7ffffbe3924bfc0e1500602110e7304f64b3d968686888dededee8ecec8c9191114bda0100608e10e7308f9462bcb4299c25ed00003037582f09f3483e9f8fddbb77c7c0c040d4d5d54d79e6bcb3b373dc7ba497b4b5b54dbab11d0000f0ee8973984772b95cd4d5d55df092f6a1a1a1181a1a3ae739010080e955532c168ba90701c0782d9fff7cfce51d9b63d5d5579ff398679f79267eb86f6f3cfead6fcde0c80000a836f79c03cc52fff7faebf1d65b6fa51e06000033409c0300004062e21c0000001213e700000090983807000080c4c4390000002426ce0100002031710e000000898973000000484c9c0300004062e21c0000001213e700000090983807000080c4c4390000002426ce01000020b1c5a90700c0a813274ec4a953a7ca1ffffed4a9385d3c7ddec7fdeecd37636868a8e2731ffad087e2031ff840d5c70800c0f410e700b3c08f7ef4a368db786b7cf4f2cb2316d5943fff0797fed1a48f5bba7c799c78f5d5f8f2a63bca9f3bfeca2f62fbbdf7c6e73ef7b9691b2f0000d555532c168ba90701b0d0bdf1c61bf1e79ff94cfcd98d37c6e76ffdab8b3ecf81de9e78f29bdf8c033ff84115470700c07473cf39c02cf0bef7bd2ffee9b1c7e2c0fefdf1b39ffef4a2cef1bfbffc657cf79147e21f1e78a0caa3030060ba89738059e2631ffb587cf1861b62cff6fb2ef8b1bf7de38df86aeb2df1851b6e88abaeba6a1a460700c07412e700b3c8cd5ff842fc615d5dfccb63ff78418fdbfbf0eef8e8d20fc7976fbd759a460600c074b2211cc02cf29ef7bc271ebcfffef8d3b56ba361f59af89329cc82fff4f9e7e3bf7ef29378e2dbdf8ec58bfd580700988bcc9c03cc324b972e8d0777ec883deddbe337afbe3ae9b1bf7de38d78f46b5f8bbfdeb8312ebdf4d2191a210000d526ce0166a1967c3e565e7165ec7be491498ffbc71d3b62e59557464b3e3f43230300603a887380596aeb3d77c72f5e38163f397470c2af1ffcf77f8b034f3e19dbb6de3bc3230300a0dac439c02cb574e9d2f89bdb6f8ff6db6f8fdfbdf966c5d74efcfce7f1bdc71e8b7f7e625f7cf0831f4c34420000aa459c03cc62575f7d75b4e4f3b173ebd638f5fbdf973fffcd071f8c6b3efde9f8d4a73e9570740000548b380798c5162d5a147fbf6347fc6ca03f0e3cd51b1111fff9afdf8bf7164fc7a6af7c25f1e80000a816efb90330073cf4f5afc77d3b76c487977f241ebeefbef88fdedea8adad4d3d2c0000aac4cc39c01cb06ad5aa58dfd4145fbde5e6d874fbedb162c58ad4430200a08a6a8ac56231f5200038bfd75f7f3d8e1d3be63e73008079489c030000406296b50300004062e21c0000001213e700000090983807000080c4c4390000002426ce0100002031710e000000898973000000484c9c0300004062e21c0000001213e700000090d8e2d40300e68e9a9a9aa8a9a9493d0c9871c562318ac562ea610000f3983807a6aca6a6265e78ebedd4c38019f789c597a41e020030cf59d60e000000898973000000484c9c0300004062e21c0000001213e700000090983807000080c4c4390000002426ce0100002031710e000000898973000000484c9c0300004062e21c0000001213e700000090983807000080c4c4390000002426ce0100002031710e000000898973000000484c9c0300004062e21c0000001213e700000090983807000080c4c4390000002426ce0100002031710e000000898973000000484c9c0300004062e21c0000001213e700000090983807000080c4c4390000002426ce01000020b1c5a9070030db1c2e14e2485f61d2635637e5624d2e3723e3010060fe13e7006739d257883d1d1de739aa23563434c437baf7c7b26c7626860500c03c66593bc0453a3630105f69b93ef53000009807c439c024f63d7d30fefbedd3157f7a9f7d2e2eabaf8f88d1403fdadf9f78940000cc7596b5035ca0958d8df1d9d6d6f2d2f793c3c3115179af7a4b6b5b747775c6e1bebe58d3d4149beedb5e7efcf1c1c1e8dcbd3b8e0e8c46fdb2fa6cb4b4b656dcc3bea77df4f865d96cb4b4b6953f3ff639d637e7636563e3a48fe9eeea8cc385be383e34181111b57599589d6b8a96d6b6a8cd64c6bdb6c38542747775c5f1a1c1a8adcbc4fa7c73c5f35fc8eb040060eac439c0053a393c1c3feeed8d8888257575e5a81e7baffae1bebe38d2d7573ebe14addd5d9d71cfc68d679db12ff6efed8aeb6f698d071f7f3c22228ef60fc481a77a63495d5d451cefe9681f73de91d87a26ce8ff6f7979ffbde9d3b2322e2ee0d1b62ffdeae71e33ff0546fec696f8fa79e7bbee27ef9898e3ff0546f74eede1d4f1c3c548ef9a9bc4e00002e8c65ed0093b8ffae3be3a6756b2bfeacbde2f23836301011115b77ed9af071a5608d8858d9301ad0077a7bca61bea2a1211eedee8e7d4f1f8cf5d7354744c4febd5d71ff9d774644c4fafce8e75e1b1989c38542448cc6efd8f31e1eb3a3fc81de9ef2dfaf6dce4777576739b4d75fd71cfb9e3e18fb9e3e189bb66d2b9ff7ee8d1bca8fd9d3be7ddcf1a5638f0d0cc46de7b8b77ea2d70900c08533730e308952844f64454343ac69ca4df8b5cbeaebe3bb070fc5924c268e0f0e4644c4df9e09ef2575751533d16b72b9b869ddda38d2d7175d0fef8eb6cd9b637d733e224643fe406f6facc9e5c6bdbddbb1818138393c1cb5994c79267f4543432ccb66e378d760f9b8958d0de5d9fd35b95c2c39f3bc6363fac9aeaef2e31fddbfbf7c6c44c49e8e8e38d2d717c70707c7ed4c3fd1eb0400e0c289738049ac686818776ff6d1fefe786d64248e0d0cc475abae8a432fbd3cee98cfb6b69643b6b6b1318e0f0ec689a1a18818bd57fcece35b5a5bcbb3d087fb0ad1d2da16ab9b9ae2485f5f7986fc70a1af3ca6d22f0d0ef4f6c4fae67cf9e36b9b4767dc2bee45efe8883d1d1db1baa929d634358dbb57fd687f7f796c2b1b1acb33f511510ef9f2b8b26d93be4e00002e8e380798c4d69dbb2a366a2bd9d3be3df67474c46b2323b1a7bd7ddcf2f6d567cda8bf3266567979b67edcf996d567cb7f2fcd40af6f6e8e237d7d716c60208e0f0ec68fcf2c5d2fcdd61f1b1828077bc9e88cfbe87fafbfa5b5e21ef22367ee0fdfd3d11197d5d7c737baf7c7cac6c6f2867611a34beb27ba4f7decb8267b9d00005c1c710e701136ddb7bdbc295a69d7f56abbb6391f0fdc7557448c6e24f7cecc7b73d466ea46e37ccc52f7cbeaeb2b66c41f7cfcf168dbbc39babbbae2705fa16289fe89a1a1b869ddda38f4d2cb15cf599a5d9f88100700983ee21ce0228c5dfa5d5b37fe2dc9ce3676f6fdc7bdbde376353f70e69ef18877227859365b5ec25eba27bc74aeda4c26f67474c489a1a172a05f7b66d6bce4f8e0609c1c1eae98d53f5c28c4fd77dd19c70606e2b5919138dadf5f11f4cbeab3e3def6ed95c1c109570f0000503d766b0798447757d7e812f6317feedeb0a162f7f2d2ceeae773fd2dad1131ba1cbdbbabb3fcf9a3fdfde58f5734345484704bebe863cab3e6d7bd734ff992babacaaf35bf338ebb376c88b5575e11375fb32e3a773f54fefc9a5c2e968f5942bf3c9b8dda4c26569f992ddfbfb72b8ef68fae0438393c1c5f5cb7366ebe665d7cfc924515cbdf0100a82e33e7009338d7fdd7252b1a1a2ade877c325b77ed8a03bd3df1dac848dcb3716374eede1db5994c7923b8257575f1e0771eaf78ccd9bbc1afcebdb3e47c7d73be3cbeb1efb77ef6733d70d75dd1ddd515b5994cbc327663baeb9acb9bb96dddb92b9a3fb92a22229a3fb92a563735551cbb69dbb6719bd80100503d66ce012ec28a8686d8b46d5b3c71f0d0941f539bc9c4a1975eae98412f85f9eaa6a678e2e0a18a25e611a333e497d5bfb381dcd8585f7356a89ffd5c4f3df77c79a6bdf45c27868662495d5db4deb1b9fc9669a5e7d9f7f4c1f2738d3d76d3b66de396e10300505d35c562b1987a10c0dcb068d1a278e1adb7530f63de28ddb7be3c9b1df7fee1d5747278b8bc543d22ce7bff78e93ef3a91cbb507c62f12571faf4e9d4c30000e631710e4c993867a112e700c074b3ac1d0000001213e700000090983807000080c4c4390000002426ce0100002031710e000000898973000000484c9c0300004062e21c0000001213e700000090983807000080c4c4390000002426ce0100002031710e000000898973000000484c9c0300004062e21c0000001213e700000090983807000080c4c4390000002426ce0100002031710e000000898973000000484c9c0300004062e21c0000001213e700000090983807000080c4c4390000002426ce0100002031710e000000898973000000484c9c0300004062e21c0000001213e700000090983807000080c4c4390000002456532c168ba90701cc0d353535515353937a1830e38ac562f8e71200984e8b530f00983bc40900004c0fcbda0100002031710e000000898973000000484c9c0300004062e21c0000001213e700000090983807000080c4c4390000002426ce0100002031710e000000898973000000484c9c0300004062e21c0000001213e700000090983807000080c4c4390000002426ce0100002031710e000000898973000000484c9c0300004062e21c0000001213e700000090983807000080c4c4390000002426ce0100002031710e000000898973000000484c9c0300004062e21c0000001213e700000090983807000080c4c4390000002426ce0100002031710e000000898973000000484c9c0300004062e21c0000001213e700000090d8ff035a188c4a664e17020000000049454e44ae426082}\par}
+{\pard \ql \f0 \sa180 \li0 \fi0 At it\u8217's core are the three MVC components we would expect - the Model, View and Controller architecture. In Rails:\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab Models represent the data in an application and are typically used to manage rules for interacting with a specific database table. You generally have one table corresponding to one model with much of your application\u8217's business logic living within these models.\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab Views represent your user interface, often taking the form of HTML that will be sent down to the browser. They\u8217're used to present application data to anything making requests from your application.\par}
{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab Controllers offer the glue between models and views. Their responsibility is to process requests from the browser, ask your models for data and then supply this data to views so that they may be presented to the browser.\sa180\par}
View
8 chapters/02-fundamentals.md
@@ -28,9 +28,13 @@ Martin Fowler has done an excellent job of writing about the [origins](http://ma
### MVC Applied To The Web
-The web heavily relies on the HTTP protocol, which is stateless. This means that there is not a constantly open connection between the browser and server; each request instantiates a new communication channel between the two. Once the request initiator (e.g., a browser) gets a response the connection is closed. This fact creates a completely different context when compared to the one of the operating systems on which many of the original MVC ideas were developed. The MVC implementation has to conform to the web context.
+The web heavily relies on the HTTP protocol, which is stateless. This means that there is not a constantly open connection between the browser and server; each request instantiates a new communication channel between the two. Once the request initiator (e.g. a browser) gets a response the connection is closed. This fact creates a completely different context when compared to the one of the operating systems on which many of the original MVC ideas were developed. The MVC implementation has to conform to the web context.
-An example of a server-side web application framework which tries to apply MVC to the web context is [Ruby On Rails](http://guides.rubyonrails.org/). At it's core are the three MVC components we would expect - the Model, View and Controller architecture. In Rails:
+An example of a server-side web application framework which tries to apply MVC to the web context is [Ruby On Rails](http://guides.rubyonrails.org/).
+
+![](img/rails_mvc.png)
+
+At it's core are the three MVC components we would expect - the Model, View and Controller architecture. In Rails:
* Models represent the data in an application and are typically used to manage rules for interacting with a specific database table. You generally have one table corresponding to one model with much of your application's business logic living within these models.
* Views represent your user interface, often taking the form of HTML that will be sent down to the browser. They're used to present application data to anything making requests from your application.
View
BIN img/rails_mvc.fw.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN img/rails_mvc.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
8 index.html
@@ -524,8 +524,12 @@ <h3 id="smalltalk-80-mvc"><a href="#TOC">Smalltalk-80 MVC</a></h3>
<p>Developers are sometimes surprised when they learn that the Observer pattern (nowadays commonly implemented as a Publish/Subscribe system) was included as a part of MVC’s architecture decades ago. In Smalltalk-80’s MVC, the View and Controller both observe the Model: anytime the Model changes, the Views react. A simple example of this is an application backed by stock market data - for the application to show real-time information, any change to the data in its Model should result in the View being refreshed instantly.</p>
<p>Martin Fowler has done an excellent job of writing about the <a href="http://martinfowler.com/eaaDev/uiArchs.html">origins</a> of MVC over the years and if you are interested in further historical information about Smalltalk-80’s MVC, I recommend reading his work.</p>
<h3 id="mvc-applied-to-the-web"><a href="#TOC">MVC Applied To The Web</a></h3>
-<p>The web heavily relies on the HTTP protocol, which is stateless. This means that there is not a constantly open connection between the browser and server; each request instantiates a new communication channel between the two. Once the request initiator (e.g., a browser) gets a response the connection is closed. This fact creates a completely different context when compared to the one of the operating systems on which many of the original MVC ideas were developed. The MVC implementation has to conform to the web context.</p>
-<p>An example of a server-side web application framework which tries to apply MVC to the web context is <a href="http://guides.rubyonrails.org/">Ruby On Rails</a>. At it’s core are the three MVC components we would expect - the Model, View and Controller architecture. In Rails:</p>
+<p>The web heavily relies on the HTTP protocol, which is stateless. This means that there is not a constantly open connection between the browser and server; each request instantiates a new communication channel between the two. Once the request initiator (e.g. a browser) gets a response the connection is closed. This fact creates a completely different context when compared to the one of the operating systems on which many of the original MVC ideas were developed. The MVC implementation has to conform to the web context.</p>
+<p>An example of a server-side web application framework which tries to apply MVC to the web context is <a href="http://guides.rubyonrails.org/">Ruby On Rails</a>.</p>
+<figure>
+<img src="img/rails_mvc.png"><figcaption></figcaption>
+</figure>
+<p>At it’s core are the three MVC components we would expect - the Model, View and Controller architecture. In Rails:</p>
<ul>
<li>Models represent the data in an application and are typically used to manage rules for interacting with a specific database table. You generally have one table corresponding to one model with much of your application’s business logic living within these models.</li>
<li>Views represent your user interface, often taking the form of HTML that will be sent down to the browser. They’re used to present application data to anything making requests from your application.</li>

0 comments on commit 9bbba9d

Please sign in to comment.
Something went wrong with that request. Please try again.