This commit is contained in:
Nick Beckley 2026-06-01 19:44:12 +01:00
parent 1199678f46
commit ca82bd973b
51 changed files with 439 additions and 159 deletions

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpSTT2/cNhDFv4owZ1HmP1GkbsY6RRdu4kWySIveKHIUE5apBUU5CYz97gG1GzjprRdBGPBx3vvN8BWifUbo4fZ0eveCMS9QQw5biVOuCFWEsiNre6562jZaaq0Z/RdqCPf4HXropHPMGSQCFRLpaUsGMTriPRpGmae8leVO+2WB/hVsaDy+BIfNvHzGtIQ5Qg9/h+jnr6W3DY2b5tU3aZ5wH5dsoytmPux39+Sv28Px4XA5teBSxE3w0INEqRA7TbQYKZFoPDGiY2TU0rHBoB6Nv8hCzJiinZrFP73193OOmF3PGy4aSriBcw3eZlssD3bB4/dTcbEhuiv1eitvv/0rvGCCntc/YV6uu3FTuHlehjVM/ubyzXZ5KilPaT5hygE3JlvMabI5zLG6dtpNAWOGGh4+VYfJ5nFOz7+B+nTJv/8f8Y+l+7tv6NaMfjevMUMPTBio4b11jyFitb+DHihD7oVGMnKmiNTeEtsKQ5QSakTmTMcZ1LCbYw5xndel2seMX9IWAHr4w04LXqzfJvcYMrq8ppLqH1V24ZBmv7pcvfFntKGNoLSI1nxac/URfUjoMpZ8x7Re7/uPhCu+iXZrShhzdbD5sfrTLo/Qg7HaMWussVY5N2JLcaSeWkU7j8or9JL7zksjvZKGOiXtwKS3LRvGUoEasIy72jYMDdVj6xwRLaNEilYRaztF0BvNWypa6wriN47Vw1R01mkq0QticPREGmaJkUIQL1rbcTV2HR9/QXKdPqMFsMeXy1vZHCjvNXrFCJesJdIYRrRpOzJ0ejCD0ti64vkeU8TpF1Dvg0vzMo+5ui5P9Ru6j2ss773aFulriOTbNqO72T1hqsqMbYhlva9jPZ/P5x8AAAD//wMAbKuihDYEAAA=

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpSU227cNhCGX0XgtSjzfNCdYbeo66ZexIu06B1FjmwiWmpBUZsGxr57QO0GiXvXO2Ggfw7f/MM3lNwBUI9uj8dfTpDKglpU4hZihClMFCZ0T2XPVE9NxyWVjJl/UIviI3xFPdLCe+otYA4KsAhE4oGPHocAlhIaCJOi5nQvC+rfkItdgFP00M3LJ8hLnBPq0V8xhflLre1i56d5DV2eJ3hIS3HJ12b+fLh7xH/c7vZPu8tfCyxV3MWAekRUABG4xIyAx0KDwZYKjgOA4VZAGKm8yGIqkJObuiV8/lE/zCVB8T3rGO8IZhadWxRccbXlwS2w/3qsXWyI7mu83cLbZ/+GTpBRz9rvMC/pbvwUb8p8nOAE09HlBfKNnw8HlwJq0THPR8glwoZlm3SaXIlzaq7F7qYIqaAWPT03u8mVcc6Hd6yeLwge/geBE+QB9YgTyZXWIDjnzqqBEQhaeaXY4B3R48CAeiDSCm2pJpRbRiyXShsdHLEetehlmgc3/b5s/CwjgwlEM8VAgGVCKesJcAOj1ECCU2pQxtvAjWbCBMOddY7aAbS3yleDfHD+NSZoHu7rNBRY4AbwyKjCwgSHneQWK8XVCNRbzShq0d2cSkzrvC7NQyrwkjd+qEe/ummBC7nb7F9jAV/WXKH+rWqxXZ7D6kvzwwGUdKTjhFTRWo5raT5CiBl8gYp3n9drvv9ImGKb6G7NGVJpdq68Nr+55bVSccZTZ+uoyvsRJIGRBOIU0QFUUBAECzoIK4ISlngl3EBFcJIOY42gFkE1XHPxuGBGj3LAgjqOxSA9ttSM2EklJEgKlPN3HJunqeqcN0RA4NjCGLCw1GErOMeBS6eZGrVm409IruajpAIOcLpc69aBCsFAUBQzQSUW1lJsrNR40GawgzIgfe35EXKC6SdQH6LP8zKPpbl6t3mH7uOa6ovTbD7+EhP+d9vR/ew/Q27qjl1M9cCuaz236ABuWTMctgerf0O7el3Nfnu3mO0EsbZFz8Xlsh6vYUU6JsT5fD5/AwAA//8DAP5zk9z0BAAA

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpSUTW/jNhCG/4rAs6mQFEWJuqVOFzWy2RibdFv0RnFGDhGZNCgq2yDIf19QdhBnFz30Joz4zsczL/lCvNkj6cjl4fD7E/o0kRVJbgkJJhRlijJ+z+tOqI63pRSKiZb/Q1bEXeMz6UgjreVWI61QIZXAatpXg6UAqDnjwEQtc06zm0j3QowrAZ+cxTJM3zBOLnjSkb+ch/A91zautGOYoYxhxI2fkvE2N/Nls76mny+397fb46kJpywuHZCOMAUooaqpYGipbLClmsuKAmJbaYkw8Poocz5h9GYsJ3h8rw8heUy2E6WoSkaFJq8rAiaZ3HJvJrx/PuQuFkRXOb5awstn90KeMJJOrN5gHtNd2NFd7Kd+diNcjGG3c363Dn5wuzmalAuvyCGGA8bkcIHzm/MmPn8Ou13ORz6ZcUKyIvcY986b8fjjCgczj+kuzHEhM8Hjf50hHTFzCmRFFpLjuJQtTsOsR4c+/aI9K3x7V2xHk4YQ9x+WdHdkv/kf6G+MfXAei81V1nAUULVIB8EVlS0YaupKU6UqNSC3uhGcrMg6+OT8HOap2PiEuxO1D/1dRvvgEto0xzzT3yqbbRsDzDYV7wvmrGRlxVgWzekwp+IrgotoE+Yh7uN8yveTRCixiD65EX/Bs55jRJ+KrUkPxR9meiAd0aa13GijjVHWDlgzHBgwo1gDqEAhSAENSC1BSc2skqbnEkzN+yFHyIpgNlmx+Jo3LdqG9bTumaISaqC6Ei1tUaHVUiPy9gPc4nbMOmNbJhEqqnEAKjU3VMuqolDVphFqaBoxnHE6GYKzTP3chH9OCCcvfTla+212wKfjPV76VAAtguJUSF5TqTWnra4b2jdtr3vVYm3zZOvgp/AG8hvGPkwu5Ufkxnm3N+PPR943c43R43i2nRtnY5jCkIqTLYsP+/o6+/yKFYtFvztP/12McRXsI8YiG8s4f7bM19fX1x8AAAD//wMAb4AujgwFAAA=

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACoxUS2/bOBD+KwLPokJSFCUa2IPhtFgjTWMk7u5ibxQ5jInIokFRToMi/31BWa6dooe9CaN5fY/hD9SrPaAFWh4On47QxwHlKLopxAgTmAhM6JZWCyYWtCmaUhJK6n9RjtwdvKEFqrnWVEvAJQjA3JAKt6XV2BiQlFBDWMVTT/U8oMUPpFxh4Og0FH74C8LgfI8W6G/XG/+aZitX6M6Ppgi+g3U/RNXrtMzX9eoOf1lutg+bU9YAQyounEELRIQBbsoKMwIa8xoaLCkvsQFoSsnBWFqdylwfIfSqKwbzcplvfOwh6gUrWFkQzCR6z5FRUaWVWzXA9u2Qtpgouk3xfApPn4sf6AgBLVh+JvPU7kZ37mY/tKPrzE1U4RmiDWoPrz68wFF1KEeH4A8QooOJm4en7LISJQUpmGCEoBzdK71zPWTr2+yhS4CVbggHU2IJ1mAuqcKSlyU2ZaVqJmxdM4tydAehh+6q673TwQ/exmymPPswZ+X76PrRj0O27iM8BxVPdZ9VNwDK0WZsOzfsHkGZt61/HNO/fuwSltUYAvQx26i4y/5Uww4tkFSNpkoqqZTQ2kJFwBJDlCC1AWEEGM5MbbjkRnBJtOCqpdyoirY2RVCOHsZ4GOOZ/+9XS2yD2+/BXDbYThxvOhWtD/u1gT4665I054zJUF03ocrmnqvOQR8/kJwcRYGZsgFsGRWYN0ZhVZUSC1EKC1TLmtETYdY9jz95ItYaXtqqaUQrW0qA2brhpLYtMdqWWpqqhZrVpG6gkZqQtuK0aaUmBmjFTUIXvBl1/NUK5STQ49in68zWCfar6/F3wS+MbIKPXvsuCeY6eHobIux/p9rK7w9+cDHht7O03wa49336O9//zNlcvPTxEoN0B9l0eq2teFlaio0oCeaVNFgSLjAjpGyNBstsiXJ06/ULhCwZTLl+0uTsqYenbBn0zkXQcQxp8j8TqJOcn88nc+Gj+Pppu/IBlodDPkf/OCaSTs3OBvjwrnwbUvrOD/EK8gztCTp7XuzKTgaOp6fKpaAwpgEjKGacVphLSXEjqxq3ddPKVjRQ6Ytds0cwLoCOU79tGNO0mdnf+XIZorNKxyEdzxevJzvN/pxTfl3ySraf1afhV9LNVpo7UZIs+3R6OCcH/a938/39/f0/AAAA//8DAIDljZgoBgAA

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpSUTW/cNhCG/4rAsyjzm6Juht2iCzf1Il60QW8UZxQL0VILito0MPa/F9Rukbi33ISBZublM+/MG4n+iKQj96fTL2eMeSE1yeMWEkwYygxl/MB1J0zH20Y6ZWTL/iY1GZ/wG+mIVSHw4JBKNEgVME17OQQKgI4zDkxoVWr6zwvp3ogfG8DzGLCZlz8xLeMcSUf+GiPMX0tvPzZhmldo0jzhLi7Zx1DE/LF7eKK/3+8Pz/vrXwsuJbkZgXSEGUAFUlPBMFBlsaWOK0kBsZVOIQxcX9PGmDFFPzULfPneH+YcMYdONEI2jApHLjUBn32R3PsFD99ORcWG6LHE6y28fXZv5IyJdKL+D+a13F2Yxrtl7Sc843TyacF0F+bj0UcgNTml+YQpj7hhOWPq52XMhWgI1rct59B6q7SFVmohLUiG0DKrwYHzRplBBK0H6Ftn1aBAcAUGleotqckGbpp8HudY3bQ/TCPGTGry/FLtJ5+HOR3foX+5Et39BNAim3REMi2NtaiklN6ZXjAEa4Ixog+e2aEXyAMy7ZR13DIunWBOamNbC565QGrywYfXMWK1eyzdOQqQLdJBcENVC556LR01RpoBeXBWcFKThznmMa7zulS7mPFz2t5LOvKrnxa8vvQ+hdcxY8hrKhA+mWLGfZphDbn6bgDOGtZIxkrSmk9rrj4ijAlDxoLjkNZbvf+lCCO2pIc1JYy52vv8Wv3ml1fSEefbwL3zznsTwoCa4cCAecMsoAGDoARYUE6BUY4Fo3zPFXjN+6FESE2w+K3aLC6DZ8oBUKl8S5XrDe2RK6qFCEYFxgZp3nGsnqeS50PLFIKkDgegynFPnZKSgtTeCjNYK4YfkNzMwlkBDHi+LuumwAC0CIZTobimyjlOW6ct7W3bu960qEPR/IQp4vQDqA9jSPMyD7m6ea16h+7jGsvBqTbffR0j/Web0eMcvmCqyoz9GMt+3cZ6qckR/bImPG73qnsj+7Jc1WE7W8I1ijlXk5fsU15Pt7BhjVDqcrlc/gUAAP//AwBWz9eg8wQAAA==

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpRTy27cOBD8FYFnUeZLlKibMd5FBk7Wg8RIFnuj2K0MEZkcUJSTwJh/X1AzQeLcciOKrO7qquYLCfYJyUBuT6e/njHkhdQk+w0STGjKNGX8kbeD0AM3jTKGia77j9TE3+N3MpBOOcedQSpRI1XAWjrKyVEANJxxYKJVpab9vJDhhVjfAD57h01cPmJafAxkIJ98gPi19La+cXNcoUlxxn1Ysg2uiPlnv7unb28Pjw+Hy6sFl0JuPJCBMA2oQLZUMHRUddhTw5WkgNhLoxAm3l5oPmRMwc7NAl9+9oeYA2Y3iEbIhlFhyLkmYLMtkke74OP3U1GxWXRX8HqDt+PwQp4xkUHUP8y8lLtxs79x8enJBriZfPDLkdTklOIJU/a42bFNOM82+xiqa5Pd7DFkUpOHD9VhtnmK6emVRx8uo+//YPJ31h19wGp/VzgcBcge6SS4pqoHS20rDdVa6gm5M53gpCa7GLIPa1yXah8yfk6bSjKQv+284EXfbXJHn9HlNRXp/+qSNX7zeRehAIzU5JAirC5XP+3mrGGNZOXyYc2nNVfvEXxCl7HM9JjWa/nfKEKLjbRbU8KQq4PNx+qNXY5kIMb2jltjjbXauQlbhhMDZjXrADVoBCWgA2UUaGWY08qOXIFt+TgVpOgu6VbbQmHXa+ysoLaXlqpRj7RvR0GZAZS9Yi1I8crW6mEuPOt6phAkNTgBVYZbapSUFGRrO6GnrhPTL5ZcE+es+A34fPkamwIN0CNoToXiLVXGcNqbtqNj149m1D22rmi+xxRw/sWod96luMQpV9eFqV5Z934N5XtX2/J89YF+2yK7i+4LpqpEbn0o23xN+Xw+n/8HAAD//wMA1KCN2SUEAAA=

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpRUy27cOBD8FYFnUeZLlKibMU6wA2/Wg2SQDXKj2K2YsEwNSMqJYfjfF9TMwvFpsReCaLGa1VVFvZBgH5EM5Pp0+vCEISdSk+y3kmBCU6Yp40feDkIP3DTKKK5b/Z3UxN/iMxlIp5zjziCVqJEqYC0d5eQoABrOODDRqtLT/khkeCHWN4BP3mGzpK8Yk18CGcjfPsDys9xtfePmZYUmLjPuQ8o2uELmr/3ulv55fTjeHc6nEqYCbjyQgTANqEC2VDB0VHXYU8OVpIDYS6MQJt6eYT5kjMHOTYKHt/thyQGzG0QjZMOoMOS1JmCzLZRHm/D4fCosNoluSr3eytt2eCFPGMkg6n/FPLe7crO/ekzj6me4Oq/Zpoe0rZN1eYnPpCanuJwwZo+bPtcp4eM4Px9tevh4PlO26cMvdGtG2C1ryGQgXHakJptA82yzX0J14bibPYa8fczRh+Tdf/WSpCZ3X6rDbPO0xMd3fnw5y7z/Hyp/su7eB6z2NwXDUYDskU6Ca6p6sNS20lCtpZ6QO9MJTmqyW0L2YV3WVO1Dxh9xG4kM5KOdE575XUd37zO6vMYy5zddcnWIC6wuV29ectawRjJWQGs+rbn6jOAjuoxliGNcL/2+vocILTbQbo0RQ64ONt9Xf9h0TwZibO+4NdZYq52bsGU4MWBWsw5Qg0ZQAjpQRoFWhjmt7MgV2JaPU6mQmmCJTrWltW+5mzS0FBAUVbyT1HSM0Um2trdOudEUS950rO7mgrOuZwpBUoMTUGW4pUZJSUG2thN66jox/SbJJQ+cFYEBn87vbmOgAXoEzalQvKXKGE5703Z07PrRjLrH1hXOtxgDzr8J9cm7uKRlytUlIdU76T6vofw7qi0tP32gvzaPbhb3gLEqHlsfylO52Pr6+vr6DwAAAP//AwCu17MFggQAAA==

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpRTS2/UMBD+K5HPcepXnDi3agtiVaCrsgLEzfFMqNXUWTlOH6r2vyNnFxW4cbGskWfme/mVBPuApCOXh8O7RwxpJiVJfi0JJjRlmjK+53UndMdNpUwjWql/kJL4a3whHWmUc9wZpBI1UgWspr0cHAVAwxkHJmqVZ9qfM+leifUV4KN3WE3zV4yznwLpyDcfYHrKu62v3DgtUMVpxG2Ykw0ug/m83VzTj5e7/c3u9GrGOTdXHkhHmAZUIGsqGDqqGmyp4UpSQGylUQgDr09tPiSMwY7VDPdv+2FKAZPrRCVkxagw5FgSsMlmyL2dcf9yyChWia5yvVzL67V7JY8YSSfK32Kexl240V88zP3iR7g4ncnO95nlIU4HjMnjqslKcxxt8lMozps2o8eQSEluvhS70aZhig9/CfXlxH/7H/T3efu7Z3RLQthMS0ikI1wxUpJP1t35gMX2Ko/jKEC2SAfBNVUtWGpraajWUg/InWkEJyXZTCH5sEzLXGxDwp9xJUA68t6OM56gX0Z35xO6tMTM6rvOWdjFCRaXijf9OatYJVlGcrOkw5KKWwQf0SXM/PZxOc/7p0VosTZtlhgxpGJn013xwc53pCPGto5bY4212rkBa4YDA2Y1awA1aAQloAFlFGhlmNPK9lyBrXk/5AopCWa7izVhtlG1dGgoiL6lqu8FtXVb0wabRiphLFdZkzcdi5tx7XMtUwiSGhyAKsMtNUpKCrK2jdBD04jhD0nO7nOWhwE+nv7KikADtAiaU6F4TZUxnLambmjftL3pdYu1y5ivMQYc/xDqk3dxmqchFefwFH9Jd7uE/N+LNUhPPtDn1aOryd1jLLLH1occ77Otx+Px+AsAAP//AwDgPVKONgQAAA==

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACoxU227cNhD9FYGvFRXeRJF6c20HXaSOjeyiLfo2Ikc2a5laUJSTwPC/F9TauaJAXwRhSM45c+bMPJEID0h6cnY8Xj5izAupSQ5bSDChKdOU8QNve6F7bhtlbWdM+zepSXiHn0lPOuUcdxapRI1UedbSQY6Oeo+WM+6ZaFXJCbcL6Z8IhMbjY3DYzMsfmJYwR9KTP0P088eCDaFx07z6Js0T7uKSIbpC5v3u/B39/ezmcH1zurXgUh43wZOeMO1RedlSwdBR1aGhlitJPaKRVqEfeXt6FmLGFGFqFn//Fd/POWJ2vWiEbBgVljzXxEOGQnmABQ+fj4XFJtFFiddbePvtn8gjJtKL+lXMU7o3bgpvHpZhDZN/s31JTY5pPmLKATc1rvfVVxKcNawRWjBGanIF7i5ErHYX1fVUSgRnmEIvqcXRU2U5UKukpF620Ak9dp0YSU3eYYo4fZP1Krg0L/OYqxeRq+9w9mfnlxGGCQvGW5gWJDXZLfsM0cM0R7z8hG7Np1yHtJbj8znmENd5XapdzHib4OX89f35mhLGXN1Avqt+g+WO9MSCcRwsWADt3Igtw5F5Bpp1HrXX6JXwnVdWea0sc1rBwJWHlg9jiZCa/Fo03K/O4bJ8ZbOZZJo2DtVLn86ngDF/J2NxCUfhpUE6Cq6pMh4otNJSraUekTvbCf4Kc4B0i5n0ZDTDMDDnBqEsdyAsSD8y6fVoheg6UKNsOyW0blkHzned4MrLDh3IUTIjSE1u0uxXl39stdwacJPmf9DlIhXpiWZtaxwMg9CKG7AGFdfKaIudVSMwJd0AvDUwDJxBy5w1wgHXFtTg2/GLSpfxNkS8CMtxgs/f4JpGN/IXB2D4COqH628TPODHOd2/P9m4eX95IDX5sMayEapdscjHEOknXSb6ap1yONwlBI/+avb4s4+wjEu1TahlTCtehhM9UCWxpZbDQNkAohMDMjkUNS5md4+pKg6DEMtUfUl2va/OkrsLGV1eU+H318bjel/dTJDHOT18t0m+KexHARohOSud8fh42kYbR+29Qa85FYq3VFnLqbFtR4fODHbQBltXFLte83HN1Qf0IaHLW8UvXtwwz+/Q3f8sxqsLXizKWfHa/rTFNmn/1xJ7rskDwrImfNi2df9EdjFi2pAv1tMo7uJVmKawoJujX0jPmVGN0qZ9Yfif97gSDWfm+fn5+V8AAAD//wMAeSZ9OxoGAAA=

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpSUTW/cNhCG/4rAsyjzS6Som2G36NZNvYgXadHbiBzZRLTUgqI2DYz97wHlDRL31psw0My8fOadeSURjkh6cns6/XLGmBdSkxy2kGBCU6Yp4wfe9qLrOW8M4y1T5h9Sk/CAX0lPjHKOO4tUokaqPGvpIEdHvUfLGfdMtKrUhOeF9K8EQuPxHBw28/IJ0xLmSHryV4h+/lJ6Q2jcNK++SfOEu7hkiK6I+XN390D/uN0fHvdvfy24lOQmeNIT9NYwJgWVDDRV1ozUamUpG71x0rXa6yICQhNixhRhahb/+Ud/P+eI2fWiEbJhVFhyqYmHDEXyAAsevp6Kig3RfYnXW3j77F/JGRPpRf0d5lu5GzeFmzyfJjzjdIK0YLpx8/EI0ZOanNJ8wpQDbli2l04T5DDH6trsbgoYM6nJ41O1nyCPczq+Y/X0hmD3PwicMQ2kJ5K1UhuDSkoJVg+CoTfaaS0GB8yMg0DukLVWGcsN49IKZmWrTWc8MOtITZ6neYDp92XjZwUbOs+M0AIVWqG0to6h7HBsDTIPWg+6c9bLzgjV+U6CBeB2QOOsdkXZB3AvIWK1uyc9YRyFlx3SUXBNVeeBQist1VrqEbmzRnBSk7s55hDXeV2qXcz4nDZ+pCe/wrTgG7nb5F5CRpfXVKD+vWHYp9mvLlc/HMBZwxrJWEla82nN1Uf0IaHLWPAe0nqt958UocWWdLemhDFXe8gv1W+wvBQq0DkOtjxVOzdiy3BknoFmxqP2Gr0S3nhlldfKMqcVDFx5aPkwlgipCRbDVZvHbev4qE1HdTcAVcIKOjAAaviotRfaKvDvOFaPU8kD1zGFXlKLo6fKcqBWSUm9bMEIPRojxp+QXM3HWQHs8fy2rZsC7X2HXnMqFG+pspbTzraGDqYb7KA7bF3R/IAp4vQTqA/BpXmZx1xdvVu9Q/dxjeXiVJuPv4RI/91mdD+7z5iqMmMIsSzYdayXmhwRljXhcTtY/SvZl+2qDtvdEqZhojU1ecqQ8nq6hhVvpNTicrlcvgEAAP//AwCTcdrK9QQAAA==

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpSUwW7jNhCGX0XgWVRIiaJE3VKnixrZbIyNuy16G5Ejh4hMGhSVbRD43ReUHcTZRQ+9CSPOzD/f/OQrcbBH0pHrw+H3Z3RxIjmJdgmVrJSUScr4ltdd2XacF03btKKq/yE5sbf4QjrSCK25VkgrlEiFYTXtq0FTY1Bxxg0ra5Fqwm4i3SsBWxh8thoLP33DMFnvSEf+ss7476k32EKPfjZF8COu3RTB6STmy3p1Sz9fb7b3m9OpCaeUXFhDOoJGNYxVJa0YSCpUM1AlhaJsMI2udC2NTCLAFtZFDA7GYjJP7/2Njw6j7sqirApGS0WOOTEQIUnuYcLtyyGpWBDdpHi+hJfP7pU8YyBdmb/BPJW70qO92k/9bEdzNfrdzrrdyrvB7uYAMTXOySH4A4ZocYHzm3UQXj773S7VI59gnJDkZIthbx2Mpx83OMA8xgc/h4XMZJ7+6wzpCMzRk5wsJMdxaZudh1mNFl38Jfei8f1DthkhDj7sPyzp4cR+/T/Q34F+tA6z9Q3pCONYmqpFOpRcUtEaoFBXikpZyQG5Vk3JSU5W3kXrZj9P2dpF3J2pfdB3HfSjjajjHNJMfy/NNsGbWcfsfcGcFayoGEtJczzMMfuKxgbUEdMQ2zCf6/2UUspySfpkR/wFz2oOAV3MNhAfsz9geiQdUdBqDgoUgNR6wJrhwAwDyRqD0kg0ojSNEUoYKRTTUkDPhYGa90OKkJxgMlm2+LoWbS8BBqrqoaSi5YL2suTUoJB1BWzo649ws/sx5YFumUBTUYWDoUJxoEpUFTVVDU0ph6YphwtOZ0NwlqhfmvDPCc3ZS19O1n6b3eDz6R4vOqUxLRrJaSl4TYVSnLaqbmjftL3qZYu1TpOtvJv8G8hvGHo/2ZgekTvr7B7Gn4+8b+YWg8PxYjt3Vgc/+SFmZ1tmH/b1dXbpFcsWi363jv67GOPG6ycMWTIWWHexzOPxePwBAAD//wMAg4AThwwFAAA=

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpSUT2/cNhDFv4rAsyjzP0XdDLtFF27qRbxog94ozigWoqUWFLVpYOx3L6jdIHVvuQkDveHjb97wjUR/RNKR+9PplzPGvJCa5HErCSYMZYYyfuC6E23HeWO1kkyxv0lNxif8RjpiVQg8OKQSDVIFTNNeDoECoOOMAxNalZ7+80K6N+LHBvA8Bmzm5U9MyzhH0pG/xgjz13K2H5swzSs0aZ5wF5fsYyhm/tg9PNHf7/eH5/31rwWXIm5GIB1pgxO9F5waPnhaLFKnRE8HCwpRyF5Ld5WNMWOKfmoW+PLjfJhzxBw60QjZMCocudQEfPbFcu8XPHw7FRcbosdSr7fy9tm9kTMm0on6O8xru7swjXfL2k94xunk04LpLszHo49AanJK8wlTHnHDcsbUz8uYC9EQrG9bzqH1VmkLrdRCWpAMoWVWgwPnjTKDCFoP0LfOqkGB4AoMKtVbUpMN3DT5PM6xunl/mEaMmdTk+aXaTz4Pczq+Q/9yJbr7CaDFNumIZFoaa1FJKb0zvWAI1gRjRB88s0MvkAdk2inruGVcOsGc1Ma2FjxzgdTkgw+vY8Rq90g6wjgKkC3SQXBDVQueei0dNUaaAXlwVnBSk4c55jGu87pUu5jxc9ruSzryq58WvN70PoXXMWPIayoQPpkSxn2aYQ25+hEAzhrWSMaKaM2nNVcfEcaEIWPBcUjrrd//JMKITfSwpoQxV3ufX6vf/PJKOuJ8G7h33nlvQhhQMxwYMG+YBTRgEJQAC8opMMqxYJTvuQKveT+UCqkJlrxVW8QtF63BFql2EqkKEqlDB5SpgMIjc7of3nGsnqei86FlCkFShwNQ5binTklJQWpvhRmsFUX3HcktLJwVwIDn67JuDgxAi2A4FYprqpzjtHXa0t62vetNizoUz0+YIk7/AfVhDGle5iFXt6xV79B9XGN5cKotd1/HSP/ZZvQ4hy+YqjJjP8ayX7exXmpyRL+sCY/be9W9kX1ZruqwPVvCNkILVZOX7FNeT7eyYo10ml8ul8u/AAAA//8DAGJLNdf0BAAA

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpSUTW/cNhCG/4rAsyjzS6Som2G3qOumXsSLtOhtSI5sIVpqQVGbBsb+94DaDRL31psw0DszfOadeSMRDkh6cns8/nLCmBdSkzxuIcGEpkxTxve87UXXc94YxgXn5h9Sk/ERv5KeGOU99xapRI1UBdZSJwdPQ0DLGQ9MtKrkhJeF9G8ExibgafTYzMsnTMs4R9KTv8YY5i+lNoyNn+Y1NGme8CEuGaIvzfz5cPdI/7jd7Z92l78WXIq4GQPpSeetcCA41XwAqiRT1Crh6GCCQhTStdJeZGPMmCJMzRI+/6gf5hwx+140QjaMCkvONQmQobTsYMH912PpYkN0X+L1Ft4++zdywkR6UX+HeUl346fxJs/HCU84HSEtmG78fDhADKQmxzQfMeURNyzbS6cJ8jjH6lrsbhoxZlKTp+dqN0Ee5nR4x+r5guDhfxA4YXKkJ5K1UhuDSkoJVjvBMBjttRbOAzODE8g9stYqY7lhXFrBrGy16UwAZj2pycs0O5h+XzZ+VjDXBWaEFqjQCqW19Qxlh0NrkAXQ2unO2yA7I1QXOgkWgFuHxlvti0E+gH8dI1YP96QnjKMIskM6CK6p6gJQaKWlWks9IPfWCE5qcjfHPMZ1XpfqIWZ8SRs/0pNfYVrwQu42+dcxo89rKlD/1qXYLs1h9bn64QDOGtZIxopozcc1Vx8xjAl9xoJ3n9Zrvv9IhBab6G5NCWOudpBfq99geS1UoPMcbHmq9n7AluHAAgPNTEAdNAYlggnKqqCVZV4rcFwFaLkbSoTUBIvhqs3jg5GqjI0GDYoqziV1MrSUe6V967Vi4N5xrJ6mogPfMYVBUotDoMpyoFZJSYNswQg9GCOGn5BczcdZARzwdNnWrQMdQodBcyoUb6myltPOtoY60znrdIetLz0/Yoo4/QTqw+jTvMxDrq7erd6h+7jGcnGqzcdfxkj/3WZ0P/vPmKoyYxhjWbDrWM81OSAsa8LDdrD6N7Ir21Xtt7slTCNaoWrynCHl9XgNK9ZI2/Lz+Xz+BgAA//8DACGMtEL1BAAA

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpSUy27jNhSGX0XgWlR4EyVqlzod1MhkYkzcadEdRR45RGTSoKhMg8DvPqDsIM4MuuhKwhH/c/nOL74ir/eAOnR9OPz+DD5NqETJLSFGmMREYkK3tO5Y21FaNW3LleL/oBK5W3hBHWqEMdQowBwkYGFJjXs+GGwtKEqoJawWOafeTah7RdpVFp6dgSpM3yBOLnjUob+ct+F7rq1dZcYw2yqGEdZ+Stqb3MyX9eoWf77ebO83p1MTTFlcOYs61BrFes0olnTQWHAisBKsx0NjBQDjfc3VSeZ8guj1WE326b2+DclDMh2rGK8IZgodS2R10rnlXk+wfTnkLhZENzleLuHltXtFzxBRx8o3mKd0V2Z0V/upn91or8aw2zm/WwU/uN0cdcqFS3SI4QAxOVjg/Oa8ji+fw26X86FPepwAlWgLce+8Hk8fbmDQ85gewhwXMpN9+q8zqEN6TgGVaCE5jkvZ4jzManTg0y/ai8L3D8Vm1GkIcf9hSQ8n9uv/gf5Om0fnoVjfoA4RCszyFvDAqMSitRrrmissJZcDUKMaRlGJVsEn5+cwT8XaJ9idqX3o7zqaR5fApDnmmf6W2WybGOxsUvG+YEoqUnFCsmhOhzkVX8G6CCZBHmIb53O+nyRMskX0yY3wC57VHCP4VGx0eiz+0NMj6pDSraFaaaW1NGaAmsBALNGSNBaklWAFs40VSlgpFDFS6J4Kq2vaDzmCSgTZZMXia2t0oxtpMadNg0UvW9wz02NK2/zksmnNB7jF/Zh12rREgOVYwWCxUFRjJTjHlte6YXJoGjZccDobgpJM/dKEf05gz176crL22+wWnk//8dKntLYFKylmgtZYKEVxq+oG903bq162UJs82Sr4KbyB/AaxD5NL+RK5c97t9fjzkffN3EL0MF5s586ZGKYwpOJsy+LDvr7OPt9ixWLR787jfxdj3ATzBLHIxtLOXyzzeDwefwAAAP//AwCahRQiDAUAAA==

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpSUTW/cNhCG/4rAsyjzm6Juht2ihptmERtt0RvFGcZEtNKCojYNjP3vBeUtEvfWGzHgDF8+8868ktkfkQzk9nT66YxzWUlLStpDgglDmaGMP3M9iH7gvLNaSWbdX6Ql6RG/kYFYFQIPDqlEg1QB03SUMVAAdJxxYEKrWtN/XsnwSnzqAM8pYLesv2Ne0zKTgfyRZli+1rd96sK0bNDlZcKHeS1+DlXMbw93j/TX28Pzx8PbrRXXmtwlIANBcJYxKahk3lDlbKTOKEdZBBtk0AZMFeFTl+aCefZTt8KX7+/DUmYsYRCdkB2jwpFLS8AXXyWPfsXnb6eqYkd0X+PtHt6Pwys5YyaDaP+F+VbuJkzpZt3GCc84nXxeMd+E5Xj0M5CWnPJywlwS7ljOmMdlTaUSDcH6vuccem+VttBLLaQFyRB6ZjU4cN4oE0XQOsLYO6uiAsEVGFRqtKQlO7hp8iUtc3PVfjclnAtpycen5jD5Epd8fIf+6Y3ow/8AWmWTgUimpbEWlZTSOzMKhmBNMEaMwTMbR4E8INNOWcct49IJ5qQ2trfgmQukJR98eEkzNg/3ZCCMowDZI42CG6p68NRr6agx0kTkwVnBSUvulrmkeVu2tXmYC37O+3/JQH7204pvP73N4SUVDGXLFcKfu+xDXmALpfluAM461knGatJWTltpPiGkjKFgxfGct2u9/6QII/akuy1nnEtz8OWl+cWvL2QgzveBe+ed9yaEiJphZMC8YRbQgEFQAiwop8Aox4JRfuQKvOZjrBHSEqx+a3aLRxWV9mgpht5ShVHQnltNvQMZo3A98/wdx+bjVPN86JlCkNRhBKoc99QpKSlI7a0w0VoRf0ByNQtntRjg+W1YdwUGoEcwnArFNVXOcdo7belo+9GNpkcdquZHzDNOP4D6kEJe1iWW5uq15h26T9tcF06z++5rmunfe4/ul/AFc1N77NNc5+va1ktLjujXLeNx31fDKznU4Wqe97UlbMeEti15Kj6X7XQNK95JacTlcrn8AwAA//8DACzokOP0BAAA

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpRVTXPbNhD9KxxcSzAACIIEZ3JwZSfVpP4YS9N0elsCSws1BWhAUInr8X/vkLITO5keepGgBbD78Pbt0yPxsEfSkrPD4eKIPo0kJ8ktIcGEokxRxre8akXTclFIXZeikn+RnLhP+EBaUktjuNFIS1RIpWUV7creUGtRc8YtE5Wcc8LdSNpHAq6weHQGizD+gXF0wZOWfHbehi9zbXCFGcJkixgGXPsxgTczmKv16hP9/exme31zOjXiOF8unCUtQatrxkpBSwaKSl33VCupKettbUpTKatmEOAK5xNGD0Mx2vvv9W1IHpNpRSHKglGhyVNOLCSYIXcw4vbhMKNYKDqf4/kSXpbtIzliJK3IX8g8pXtnBvduP3aTG+y75ZPk5BDDAWNyuLBxvcm+g+CsYIVQgjGSk0swO+cxW59n18P8RDANk2hLqrG3VGoOVMuypLasoBaqr2vRk5x8wuhxeJX10pkYxtCn7Jnk7E2dzdnqwkM34FzjAwwjkpysx00Cb2EIHi++opnSKdc2TvP2Kvjk/BSmMVv7hHcRnvdf7q+mGNGn7AbSLvsNxh1piYbGcNCgAZQxPVYMe2YZKFZbVFahlcLWVmppldTMKAkdlxYq3vVzhOTk15nDzWQMjuNrtLNKhmEBkT03ajU49OkNj6QljKOwZYO0F1xR2VigUJWaKlWqHrnRteAvdbYQ7zCRlvRN13XMmE5IzQ0IDaXtWWlVr4Woa5B9WdVSKFWxGoyta8GlLWs0UPYlawTJyU0MdjLpx16XSwduYvgbTZq5Ii1RrKoaA10nlOQN6AYlV7JRGmste2CyNB3wqoGu4wwqZnQjDHClQXa26r/RdOHvnMdzNx4GeHhVtylUUf5iABreg/zh+IcIe/wS4v3VScfF1cWW5OR28rMlZOtZI1+cp1+XabqchuS2u4hg0V4Giz8LCed5yZYRBQaiYmVDKyUUlZx3FKQCWkpZ1jDLQnQkJ+fB3GPMZomB8/NYfUt2vcnOotm5hCZNccb354LjepPdDJD6EPdvrOTVw34koBAlZ3NnLB5PdrRgVNY2aBWnQvKKSq05bXRV065uOt2pBiszM3Y9pcOUslu0LqJJy4ufR+MDuGGKuIKEdyHO/niddhhf0Kx2aO5/pulFH8/i5WxW4eZkcOv/4W8XMYa4CtNs4+3rX2vfh+wxW4X9wQ0Ys/dZnl2OC6SP6DHC8Dp0cYRhOo3T6+iLEby5HeGwWwJbGO+Xxcbe3+IYhiPGcQlcYdrY097V9BHTsvpOx2kDkjviNoTB7MCdSqyCxTMPw8PoTolu4Z9wwv750C/fZ+Ph6jnhwnP2PuPZ02zee4Rxirhf/tLaR7L2HuNS9Hw6+dXaX7phcCOa4O1I2lqwQlZSPLfqP481VVHVWj09PT39CwAA//8DAITxhss+BwAA

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpRTS2/cIBD+KxbnxQGMsfEt2rTqKm2zSlZt1Rtmhi6Kg1cY56Fo/3uFd6ukvfWC0Ihv5nsMrySYByQduTwcPjxiSBNZkeSXkmBCUaYo4zted6LtuCilloJx9pOsiL/GF9KRRlrLrUZaoUIqgdW0r5ylAKg548BELXNP82si3SsxvgR89BbLcfqGcfJjIB357gOMT3m28aUdxhnKOA64CVMywWYyXzfra/r5cru72Z5eTThlcOmBdARBN4xVglbMKCp146hWUlPmoLGVrRWoTML40oeEMZihnOD+bT6MKWCynShFVTIqNDmuCJhkMuXeTLh7OWQWi0VXub5aysu1eyWPGEknVn/MPLW7sIO/eJj62Q9wcTqTme6zykMcDxiTx8WTReYwmOTHUJwnrQePIZEVubkrtoNJbowPfxl1d9K/+Q/5uzz9wzPaOSGsxzkk0pGakxX5YuzeByw2V6QjjKOAqkXqBFdUtmCoqStNlaqUQ251IzJmPYbkwzzOU7EJCX/FhT/pyEczTHhifhnt3ie0aY5Z1I+FxjaOMNtUvNnPWcnKirEMmtNhTsUtgo9oE2Z5uzif+/0DEUosoPUcI4ZUbE3aF5/MtCcd0aa13GijjVHWOqwZOgbMKNYAKlAIUkADUktQUjOrpOm5BFPz3uUKWRHMaRfLgrWtc9Y1NVWqqajUQtIW+p620NqmbWpoXSby5mNxM2ScsS2TCBXV6IBKzQ3VsqooVLVphHJNI9w7S87hc5YNBnw8fZWFgQJoERSnQvKaSq05bXXd0L5pe92rFmubOV9jDDi8M+qLt3GcRpeK8+4Uf1l3O4f83Ytlj558oM9LRlejvcdY5IyND3m7z7Eej8fjbwAAAP//AwAbkHlONQQAAA==

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACoxUS2/bOBD+KwLPokJS1IMC9mA4LWqkaYzE3V30RpHDmIgsGhTlNAj83xeU5dopetibMJrX9xi+o17uADVosd9/OkAfBpSiYKcQI6zEpMSEbmjRsLqhLGNE1LzOf6AU2Tt4Qw2quFJUCcA5lIC5JgVuc6Ow1iAooZqwgsee8nlAzTuSNtNwsAoyN/wNfrCuRw36x/bavcbZ0maqc6POvOtg1Q9B9iou8221vMNfF+vNw/qUNcAQizOrUYNqJVgrGcUlNRLznHAsOGuxqTQHYHlb5OJUZvsAvpddNuiXy3ztQg9BNSxjeUYwE+iYIi2DjCu3coDN2z5uMVF0G+PpFJ4+m3d0AI8alp7JPLW7UZ292Q3taDt9E6R/hmC83MGr8y9wkB1K0d67PfhgYeLm4Sm5rERJRjJWMkJQiu6l2toektVt8tBFwFLVhIPOsQCjMRdUYsHzHOu8kBUrTVUxg1J0B76H7qrrvVXeDc6EZKY8+TBn6fpg+9GNQ7LqAzx7GU51n2U3AErRemw7O2wfQeq3jXsc479+7CKW5eg99CFZy7BNvshhixokZK2oFFJIWSploCBgiCayJJWGUpegOdOV5oLrkguiSi5byrUsaGtiBKXoYQz7MZz5/3m1xMbb3Q70ZYPNxPG6k8E4v1tp6IM1NkpzzpgM1XUTqmTuuews9OEDyahBhALTeQ3YMFpiXmuJZZELXJZ5aYAqUTF6IszY5/EXT8QYzXNT1HXZipYSYKaqOalMS7QyuRK6aKFiFalqqIUipC04rVuhiAZacB3ReadHFX63Qj4J9Dj28TqTVYT9anv8s+QXRtbeBadcFwWzHTy9DQF2f1Jt6XZ7N9gQ8ZtZ2u8D3Ls+/p3vf+ZsLl64cIlBvINkOr2yKIgyLWDOao25rFrcgpY4z4mkDMBAkaMU3Tr1Aj6JBpO2nzQ5e+rhKVl4tbUBVBh9nPzvBOok5+fzyVz4yL592iydh8V+n87Rvw6RpFOzswE+vCvfh5i+dUO4gjxDe4LOnBe7spOGw+mpshNOrWvQJcWM0wJzISiuRVHhtqpb0ZY1FOpi1+QRtPWgwtRv48c4bWb2T75c+GCNVGGIx/PVqclOsz/nlN+XvJLtV/Vp+JV0s5XmTpREyz6dHs7JQf/r3Twej8f/AAAA//8DAP6H40koBgAA

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpSTT2/bOBDFv4rAs6nwnyhRt8DZRY20G6MN2sXexpxRTVShDIpKWwT+7gvKLtr01pvwoJn5zXvDFxbhiVjPbk+nv54p5pltWA6rpISyXFgu5KNsetX1UtXGWdd15j+2YeGevrOetcZ76R1xTZa4QdHwgx48RyQnhUShGlN6wueZ9S8MQo30HDzV0/yR0hymyHr2KUScvpbZEGo/TgvWaRppF+cM0ReYf3bbe/72dv/4sL/8NdNciuuArGeErhVCK64FWG5cO3BnjeNiwNZr31i0BQJCHWKmFGGsZ/zycz5OOVL2vaqVrgVXjp03DCFDQT7ATI/fT4Viteiu6JtVXj/7F/ZMifVq88PMS7sbP4YbPz09QcSbIcQwH9mGndJ0opQDrXasG44j5DDF6jpkOwaKmW3Yw4dqP0IepvT0yqMPl9V3f7D5O/DHEKna3bGeCUkKdUd8UNJy0yFwaLTj1mo7kPSuVZJt2HaKOcRlWuZqFzN9Tisl69nfMM504btN/hgy+bykgv7vOoy+hbydsAilzz5NuPhc/bRbilrUWojSY8mnJVfvCUMin6ns9JiWa/vfSpRVa9F2SYlirvaQj9UbmI+sZw46L8GBA7DeD9QIGgQKsKJFsmgJjcIWjTNojRPeGjhIg9DIw1CUwl3SrdaD6lrsSOuOWyVabgY0HDwgl1roxpr20Aj9ytbqYSx14DthCDV3NCA3TgJ3RmuOuoFW2aFt1fCLJdfEpSg+IT1fnsZKYBE7Qiu5MrLhxjnJO9e0/NB2B3ewHTW+MN9TijT+YtS74NM0T0OurgdTvbLu/RLL867W4/kaIv+2RnY3+S+UqhI5hFiu+Zry+Xw+/w8AAP//AwDJAfRpJQQAAA==

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpSUTW/cNhCG/4rAsyjzS5Som7FO0IWbepEs0qI3ijOKCcvUgqScGMb+94LaLRKfil4IYsiZeeeZId9IsM9IBnJ7On14wZATqUn2m0kwoSnTlPEjbwfRD1w0ynChjPmb1MTf4ysZSKec484glaiRKmAtHeXkKAAazjgw0aoS035LZHgj1jeAL95hs6SvGJNfAhnInz7A8r3ktr5x87JCE5cZ9yFlG1wR88d+d09/vz0cHw6XWwlTcW48kIEgmI4xKahkVlNluokarQxlE3ROulaDLiKsb3zIGIOdmwRPP/PDkgNmN4hGyIZRYci5JmCzLZJHm/D4eioqNkR3xV5v5m07vJEXjGQQ9b8wL+Fu3OxvntO4+hluLmu26Slt62RdXuIrqckpLieM2ePG5zYlfB7n16NNTx8vd8o2ffiBbs0Iu2UNmQykZaQmG595ttkvobpK3M0eQ94Oc/QhefdfoTipycOX6jDbPC3x+V07vlwo7/8H5E/WPfqA1f6ODIRxFCB7pJPgmqoeLLWtNFRrqSfkznSipN8tIfuwLmuq9iHjt7iVRAby0c4JL/puo3v0GV1eY6nzry3ZIS6wulz9bCVnDWskK3ge1nxac/UZwUd0GUsRx7he43197yK02Jx2a4wYcnWw+bH6zaZHMhBje8etscZa7dyELcOJAbOadYAaNIIS0IEyCrQyzGllR67AtnycioXUBMvkVNuwOskNYtfSvuOMKsUkHadJUcRudBJ6qbl7x7F6mIufdT1TCJIanIAqwy01SkoKsrWd0FPXiekXJNd54KwABny5PLtNgQboETSnQvGWKmM47U3b0bHrRzPqHltXNN9jDDj/AuqTd3FJy5Sr64RU79B9XkP5OqptWr77QH9sPbpb3BPGqvTY+lBeyrWt5/P5/A8AAAD//wMAU1YsQ4EEAAA=

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACoxUT2/jKBT/Khbn4ALG2FjaQ5TOaKNOp1Gb2V3tDcOjQXVMhHE61ajffYXjTNLRHPZmPcN7v3+PH6hXe0ANWh4On47QxwEtUHRTiREmMBGY0C0tG1Y3lOWMCMkK+S9aIHcHb6hBFdeaagm4AAGYG1LitrAaGwOSEmoIK3nqqZ4H1PxAyuUGjk5D7oe/IAzO96hBf7ve+Nc0W7lcd340efAdrPshql4nMF/Xqzv8ZbnZPmxOpwYY0uXcGdQgMLIipGC4IEpgLiuLpeASE2sqXehSGJFAKJe7PkLoVZcP5uUy3/jYQ9QNy1mRE8wkel8go6JKkFs1wPbtkFBMEt2m+mIqT5/ND3SEgBq2OIt5anejO3ezH9rRdeYmqvAM0Qa1h1cfXuCoOrRAh+APEKKDSZuHp+wCiZKc5EwwQtAC3Su9cz1k69vsoUuEla4JB1NgCdZgLqnCkhcFNkWpKiZsVTGLFugOQg/dVdd7p4MfvI3ZLHn2Yc7K99H1ox+HbN1HeA4qnu59Vt0AaIE2Y9u5YfcIyrxt/eOY/vVjl7isxhCgj9lGxV32pxp2qEFS1ZoqqaRSQmsLJQFLDFGCVAaEEWA4M5XhkhvBJdGCq5Zyo0ra2lRBC/QwxsMYz/p/vwKxDW6/B3NBsJ003nQqWh/2awN9dNYla84npkB13cQqm3uuOgd9/CAyahChwExRA7aMCsxro7AqC4mFKIQFqmXF6Ekw657HnzoRaw0vbFnXopUtJcBsVXNS2ZYYbQstTdlCxSpS1VBLTUhbclq3UhMDtOQmsQvejDr+GoViMuhx7NN2ZutE+9X1+PsU7FmRTfDRa98lw1wHT29DhP3vXFv5/cEPLib+drb22wD3vk9/5/2fNZsvL3281CDtQTatXitLTmxdYVpAi7ktANeiZFiUbdEKzrgyCeGt1y8QshQw5frJk3OmHp6yZdA7F0HHMaTJ/0ykTnZ+Pq/MRY/866ftygdYHg6LufrHMYl0anYOwId35duQju/8EK8oz9SeoLNnYFdxMnA8PVUuFYUxNRhBMeO0xFxKimtZVrit6la2ooZSX+KaPYJxAXSc+m3DmKbNyv4ul8sQnVU6Dml5vng9xWnO53zkV5BXtv28fRp+Zd0cpbkTJSmyT6eHc0rQ/3o339/f3/8DAAD//wMAoVRyZigGAAA=

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACoxUy27kNhD8FYHXiDJfokjdHNuLDBw/sDNIgtxaZMtmLFMDirJ3YfjfA2ns9WMRIBdBaJJd1dXV/UQi3CNpyfF+f/aAMU+kJDmsIcGEpkxTxne8boVpuam0MbaR4m9SknCO30lLGuUcdxapRI1UeVbTTvaOeo+WM+6ZqNWSE24m0j4RCJXHh+CwGqc/ME1hjKQlf4box8cFG0LlhnH2VRoH3MQpQ3QLmcvNyTn9/fh6d3V9uDXhtDyugictMc6KDgSnmvdAlWSKWiU62jdeIQrZ1dIenoWYMUUYqsnfveH7MUfMrhWVkBWjwpLnknjIsFDuYMLd9/3CYpXodImXa3j9bZ/IAybSivJVzEO6IzeEo/upm8Pgj9YvKck+jXtMOeCqxtW2eCPBWcUqoQVjpCQX4G5DxGJzWlwNS4ngDFPoJbXYe6osB2qVlNTLGhqh+6YRPSnJOaaIw7usF8GlcRr7XLyIXHzA2R6fnEXoBlwwvsAwISnJZtpmiB6GMeLZN3RzPuTapXk5PhljDnEe56nYxIw3CV7OX9+fzClhzMU15NviN5huSUssGMfBggXQzvVYM+yZZ6BZ41F7jV4J33hlldfKMqcVdFx5qHnXLxFSkl8XDbezczhNb2xWkwzDyqF46dPJEDDmDzKSljCOwkuDtBdcU2U8UKilpVpL3SN3thH8FWYH6QYzaUlvuq5jznVCWe5AWJC+Z9Lr3grRNKB6WTdKaF2zBpxvGsGVlw06kL1kRpCSXKfRzy5/brVcG3Cdxn/Q5UUq0hLN6to46DqhFTdgDSquldEWG6t6YEq6DnhtoOs4g5o5a4QDri2oztf9D5XO4k2IeBqm/QDf3+GaSlfyFwdgeA/q0/UvCe7xcUx3lwcbV5dnO1KSr3NcNkKxWSzyGCL9ppeJvpiHHHa3CcGjvxg9/uwjXMalWCcUpDfeAKcKwVKF0lArOkF7qU0HqA2DhpTkdHR3mIrFYRDiMlU/kl1ti+PkbkNGl+e08Ptr5XG1La4HyP2Y7j9skneFfRagEpKzpTMeHw7baOWovTfoNadC8Zoqazk1tm5o15jOdtpg7RbFrua8n3PxFX1I6PJa8YsXV8yTW3R3P4vx6oIXi3K2eG172GKrtP9riT2X5B5hmhPer9u6fSKbGDGtyKfzYRQ38SIMQ5jQjdFPpNWW84pZpl8Y/ve9pq6MFPr5+fn5XwAAAP//AwDQ0XFlGwYAAA==

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpRTwW7UMBD9lcjndWo7jhPnVm1BrAp0BStA3CaeCbWaOivHKaBq/x05u6jAjYtlTfJm3nvz/MwCPBLr2PXx+OqJQprZhiW/lpRQhgvDhTzIulNtJ9vStFo3rfrKNszf0k/WsUY7J50lXpEhrlHUvK8GxxHJSiFRqFrnnvBtZt0zA18iPXlH5TR/ojj7KbCOffYBp+95NvjSjdOCZZxG2oU5QXCZzPvd9pa/vd4f7vbnv2aaM7j0yDrWOqt6UJIbOQDXldDcatXzoUFNpKq+ruwZ5kOiGGAsZ3x4mY9TCpRcp0pVlYIry04bhpAgU+5hpsPPY2axWnST65u1vF67Z/ZEkXVq89vMc7srN/qrx7lf/IhX5zPB/JBVHuN0pJg8rZ6sMscRkp9CcZm0HT2FxDbs7mOxHyENU3z8y6iPZ/27/5B/yNNf/SC3JMLttITEOibXT+/A3ftAxe6GdUxIUli1xAclDdctAoe6styYygwknW2UZBu2nULyYZmWudiFRN/iKoB17DWMM52pX0d37xO5tMSs6ovJWdjHCReXihf/pShFWQmRQUs6Lqn4QOgjuURZ3yEul37/QJRRK2i7xEghFXtI98UbmO9Zxyy0ToIFC2CcG6gWNAgUYESDZNAQaoUNaqvRaCuc0dBLjVDLfsgVtmGU112sCcPBgRCu4gJMxXUte96a1nChNQ11X/WkMpEXH4u7MePAtUITVtzSgFxbCdzqquJY1dAoMzSNGv6w5LJ9KbLBSE/nt7IyMIgtoZFcaVlzba3kra0b3jdtb3vTUu0y51uKgcY/jHrnXZzmaUjFJTzFX9Z9WEJ+78UapO8+8B/rjm4m90CxyDsGH3K8L2s9nU6nXwAAAP//AwBMOoHtNgQAAA==

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpRU0W7cKBT9Fes+GwcwxsZv0aTVjrLdjNpRd7VvGC4NioNHgNNG0fz7Cs+s2jyt9gWha87l3HMOfoOgnxFGuD2dPrxgyAlqyH4rccoloZJQdmTdyIeRDY0cGKNC/Q01+Ht8hRF6YQwzCkmLEomwtCNT6wyxFhWjzFLeidJTf0swvoH2jcUXb7BZ0leMyS8BRvjTB7t8L3dr35h5WW0Tlxn3IWUdTCHzx353T36/PRwfDpdTCVMBN97CCINRfNKcEcmcJqKlgijBJ+J6KxB5O3WtusB8yBiDnptkn37eb5ccMJuRN7xtKOEKzjVYnXWhPOmEx9dTYbFJdFfq9VbetuMbvGCEkdf/inlpd2Nmf/OcptXP9uayZp2e0rY6bfISX6GGU1xOGLPHTZ/blPB5ml+POj19vJwp2/ThB5o1o90ta8gwAmsl1LAJNM86+yVUV4672WPI28ccfUje/FevFmp4+FIdZp3dEp/f+fHlIvP+f6j8SZtHH7Da38EIlCG37YDEcSaJGKwmumsVkbKVDplRPWdQw24J2Yd1WVO1Dxm/xW0kGOGjnhNe+N1G8+gzmrzGMudfsuTqEBe7mlz99JLRhjYtpQW05tOaq89ofUSTsQxxjOu139f3EC75BtqtMWLI1UHnx+o3nR5hBKUHw7TSSmtpjMOOoqOWakl7i9JKtILb3golrBSKGin0xITVHZtcqUANWKJTbWk1kxbTgEiYQ0eEQ06moedEYM/N4GTbCvtOx+phLjhtBirQtkShs0QopokSbUts2+meS9f33P0iyTUPjBaBLb5c3t3GQFo7oJWMcME6IpRiZFBdT6Z+mNQkB+xM4XyPMeD8i1CfvIlLWlyurgmp3kn3eQ3l31FtafnuA/mxeXS3mCeMVfFY+1CeytXW8/l8/gcAAP//AwDAzsbzggQAAA==

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpSUTW/cRgyG/4owZ4083x+6GXaLLtzUi3jRBr2NhlQsRCstRqNNA2P/ezHaLRL3lptAiOQ7D1/yjUzhiKQl96fTL2ec8kJqkoctJJgwlBnK+IHrVrhW2MY5Ia1zf5OaDE/4jbTEqhh59EglGqQKmKad7CMFQM8ZBya0KjXD54W0byQMDeB5iNjMy5+YlmGeSEv+GiaYv5beYWjiOK/QpHnE3bTkMMUi5o/dwxP9/X5/eN5f/1pwKcnNAKQlKjjT9ZZRyxhQZTpLnbSCBu6Clt4HH/Q1bZgypimMzQJfvveHOU+YYysaIRtGhSeXmkDIoUjuwoKHb6eiYkP0WOL1Ft4+2zdyxkRaUf8H81ruLo7D3bJ2I55xPIW0YLqL8/EYJiA1OaX5hCkPuGE5Y+rmZciFaIw2OMc5uGCVtuCkFtKCZAiOWQ0efDDK9CJq3UPnvFW9AsEVGFSqs6QmG7hxDHmYp+qm/WEccMqkJs8v1X4MuZ/T8R36lyvR3U8ALbJJSyTT0liLSkoZvOkEQ7AmGiO6GJjtO4E8ItNeWc8t49IL5qU21lkIzEdSkw8hvg4TVrtH0hLGUYB0SHvBDVUOAi1dqTHS9Mijt4KTmjzMUx6mdV6Xajdl/Jy295KW/BrGBa8vvU/xdcgY85oKhE+mmHGfZlhjrr4bgLOGNZKxkrTm05qrjwhDwpix4Dik9VbvfynCiC3pYU0Jp1ztQ36tfgvLK2mJDy7yUFAFE2OPmmHPgAXDLKABg6AEWFBegVGeRaNCxxUEzbu+REhNsPit2izemahVAEOZRkMV04EG7gXVKiJIz7zu4B3H6nkseSE6phAk9dgDVZ4H6pWUFKQOVpjeWtH/gORmFs4KYMDzdVk3BQbAIRhOheKaKu85dV5b2lnX+c441LFofsI04fgDqA9DTPMy97m6ea16h+7jOpWDU22++zpM9J9tRo9z/IKpKjMOw1T26zbWS02OGJY14XG7V+0b2Zflqg7b2ZKs0U76mrzkkPJ6uoWVbIQS4nK5XP4FAAD//wMAamXfh/QEAAA=

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpSUTW/jNhCG/4rAs6iQlESJuqVOFzWy2Rgbd1v0RnFGDhGZNCgq2yDwf19QdhBnFz30JozmnY9nXumVOL1H0pHrw+H3Z3RxIjmJdgkJJiRlkjK+5XUn2k40heJ128r2H5ITe4svpCNNZQw3CmmJEmkFrKZ9ORgKgIozDkzUVaqpdxPpXom2BeCzNVj46RuGyXpHOvKXdeC/p97aFmb0MxTBj7h2U9TOpGG+rFe39PP1Znu/OWVNOCVxYYF0pNKt7IeG0YYxoJXsG9qWjaCat7ouldJK1yeZdRGD02MxwdN7f/DRYTSdKERZMCoUOeYEdNRp5F5PuH05pCkWRDcpni/h5bF7Jc8YSCfyN5incldmtFf7qZ/tCFej3+2s2628G+xuDjqmxjk5BH/AEC0ucH6zToeXz363S/XIJz1OSHKyxbC3To+nFzc46HmMD34OC5kJnv4rh3REz9GTnCwkx3Fpm52XWY0WXfxFe9H4/iHbjDoOPuw/HOnhxH79P9DfafNoHWbrG9IRxlFA2SIdBJe0akHTlEulLOWA3KhGcJKTlXfRutnPU7Z2EXdnah/muw7m0UY0cQ5pp79lMtsmeJhNzN4PzFnBipKxJJrjYY7ZVwQb0ERMS2zDfK73k0RIsYg+2RF/wbOaQ0AXs42Oj9kfenokHVG6NVynrbU0ZsCa4cCAackaQAkSoRLQQKUqkJViRla65xXomvdDipCcYDJZtvhawMBaCTVtGsNoBVxQ3TSSDlzXCmpTN7L/ADe7H5NOm5ZVCCVVOACtFNdUVWVJoax1I+TQNGK44HQ2BGeJ+qUJ/5wQzl76crL22+6Az6fveJlTArQIklNR8ZpWSnHaqrqhfdP2qpct1iZttvJu8m8gv2Ho/WRj+oncWWf3evw55f0ytxgcjhfXubMm+MkPMTvbMvtwr6+zS3+xbLHod+vov4sxbrx5wpAlY2nrLo55PB6PPwAAAP//AwDO5eT3DAUAAA==

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpSUTW/cNhCG/4rAsyjzS/zQzbBb1HVTL+JFWvQ2Ike2EC21oKhNA2P/e0DtBol7600Y6J0ZPvPOvJEIByQduT0efzlhzAupSR63kGBCU6Yp43vedsJ2wjRWCctb8Q+pyfiIX0lHjPKee4dUokaqAmtpLwdPQ0DHGQ9MtKrkhJeFdG8ExibgafTYzMsnTMs4R9KRv8YY5i+lNoyNn+Y1NGme8CEuGaIvzfz5cPdI/7jd7Z92l78WXIq4GQPpiAKr+8EwahgLVOneUCuNoMAttNI5cNBeZGPMmCJMzRI+/6gf5hwx+040QjaMCkfONQmQobTcw4L7r8fSxYbovsTrLbx9dm/khIl0ov4O85Luxk/jTZ6PE55wOkJaMN34+XCAGEhNjmk+Ysojbli2l04T5HGO1bXY3TRizKQmT8/VboI8zOnwjtXzBcHD/yBwwtSTjkjWSm0MKiklON0LhsFor7XoPTAz9AK5R9Y6ZRw3jEsnmJOtNtYEYM6TmrxMcw/T78vGzwnW28CM0AIVOqG0dp6htDi0BlkArXttvQvSGqFssBIcAHc9Gu+0Lwb5AP51jFg93JOOMI4iSIt0EFxTZQPQ8gqqtdQDcu+M4KQmd3PMY1zndakeYsaXtPEjHfkVpgUv5G6Tfx0z+rymAvVvXYrt0hxWn6sfDuCsYY1krIjWfFxz9RHDmNBnLHj3ab3m+49EaLGJ7taUMOZqB/m1+g2W10IFrOdQ0IP2fsCW4cACA81MQB00BiWCCcqpoJVjXivouQrQ8n4oEVITLIarNo/bQQsdBkdB+EAVs4JaKYCGVqHiMliA/h3H6mkqOvCWKQySOhwCVY4DdUpKGmQLRujBGDH8hORqPs4K4ICny7ZuHegQLAbNqVC8pco5Tq1rDe2N7V2vLba+9PyIKeL0E6gPo0/zMg+5unq3eofu4xrLxak2H38ZI/13m9H97D9jqsqMYYxlwa5jPdfkgLCsCQ/bwereyK5sV7Xf7pZkTWulq8lzhpTX4zWsZCOUEOfz+fwNAAD//wMAfgW91/UEAAA=

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACoxUS2/bOBD+KwLPpkJSFEUJ2IPhtFgjTWMk7u5ibxQ5jInIokFRToMi/31BWa6dooe9CaN5fY/hD9SrPaAGLQ+HT0fo44AWKLopxAgTmAhM6JaWDZMNk3nBGCsr+i9aIHcHb6hBFdea6hpwAQIwN6TEbWE1NgZqSqghrOSpp3oeUPMDKZcbODoNuR/+gjA436MG/e1641/TbOVy3fnR5MF3sO6HqHqdlvm6Xt3hL8vN9mFzyhpgSMW5M6hBXEnR2orgihCDuWgrLIuKYUWlKou6VrUqT2WujxB61eWDebnMNz72EHXDclbkBLMavS+QUVGllVs1wPbtkLaYKLpN8cUUnj6bH+gIATVscSbz1O5Gd+5mP7Sj68xNVOEZog1qD68+vMBRdWiBDsEfIEQHEzcPT9llJUpykjPBCEELdK/0zvWQrW+zhy4BVloSDqbANViDeU0VrnlRYFOUqmLCVhWzaIHuIPTQXXW9dzr4wduYzZRnH+asfB9dP/pxyNZ9hOeg4qnus+oGQAu0GdvODbtHUOZt6x/H9K8fu4RlNYYAfcw2Ku6yP9WwQw2qldRUJfqV0NpCScASQ5QglQFhBBjOTGV4zY3gNdGCq5Zyo0ra2hRBC/QwxsMYz/x/v1piG9x+D+aywXbieNOpaH3Yrw300VmXpDlnTIbquglVNvdcdQ76+IFk1CBCgZlCAraMCsylUTg5CQtRCAtU1xWjJ8Ksex5/8kSsNbywpZSirVtKgNlKclLZlhhtC12bsoWKVaSSIGtNSFtyKttaEwO05CahC96MOv5qhWIS6HHs03Vm6wT71fX4u+AXRjbBR699lwRzHTy9DRH2v1Nt5fcHP7iY8NtZ2m8D3Ps+/Z3vf+ZsLl76eIlBuoNsOj3gjBgpJU5iYl63JW41GNzKStSWVoUAgRbo1usXCFkymHL9pMnZUw9P2TLonYug4xjS5H8mUCc5P59P5sJH/vXTduUDLA+HxRz945hIOjU7G+DDu/JtSOk7P8QryDO0J+jsebErOxk4np4ql4LCGAlGUMw4LTGva4plXVa4rWRbt0JCqS92zR7BuAA6Tv22YUzTZmZ/58tliM4qHYd0PF+8nuw0+3NO+XXJK9l+Vp+GX0k3W2nuREmy7NPp4Zwc9L/ezff39/f/AAAA//8DAC8NZOMoBgAA

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpRTTW/cNhD9K8KcRZmkKErUzVin6MJNvEgWadEbxRnFhGVqQVFOAmP/e0DtBol764UgBnwz72P4CsE+E/Rwezq9e6GQFigh+a0kudSMa8bFUTS97HrZVabRuuXdv1CCv6fv0EOrnBPOEKtJE1PIGzbUo2OIZAQXyGWjck/7ZYH+FayvkF68o2pePlNc/Bygh799wPlrnm195aZ5xSrOE+3DkmxwmcyH/e6e/XV7OD4cLq8WWjK48gg9KNvpYWw5azlHpvTQsq5uJbOis01tjDW2ucB8SBSDnaoFn37NxzkFSq6XlawrzqSBcwlok82UB7vQ8fsps9gsusv1citv1/4VXihCL8ufZl7a3bjJ3zwvw+onvLmcyS5PWeUpzieKydPmySZzmmzycyiuk3aTp5CghIdPxWGyaZzj8xujPl307/+H/GOe/u4buTUR7uY1JOhB1B2U8N66Rx+o2N9BD1yQxLojNkqhmerQstyGaV3rkYQzrRRQwm4OyYd1XpdiHxJ9iZsA6OEPOy10oX4b3aNP5NIas6p/dN6FQ5xxdan45b/gFa9qzjNoTac1FR8JfSSXKOs7xvXa7z8QqeUG2q0xUkjFwabH4k+7PEIPxnZO2KzdaudGajiNHLnVvEXSqAmVxBaVUaiV4U4rOwiFthHDmCtQAuW4i23DatM6JBRMCjUyJTiyrlGSjbzW0nDBpXRvfCwepoyzruOKsGaGRmTKCMuMqmuGdWNbqce2leNvllzTFzwbjPRy+SsbA43YEWrBpBINU8YI1pmmZUPbDWbQHTUuc76nGGj6zaj33sV5mcdUXJeneGPdxzXk/15si/TVB/Zty+hudk8Ui5yx9SGv9zXW8/l8/gEAAP//AwAn88HONgQAAA==

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpRUwW7kKBD9FYuzcQBjbHyLOjPaVnY2rZnW7GpvmCpPUBxoAc5MFPW/r3D3aian1V4QKuoVr149eCPePCMZye3p9OEFfU6kJtltIcGEokxRxo+8G8UwiqHRnWiVYH+Tmrh7fCUj6aW13GqkLSqkElhHp3a2FAA1ZxyY6GSpab4lMr4R4xrAF2exCekrxuSCJyP503kI38vdxjV2CSs0MSy49ykbbwuZP/a7e/r77eH4cLhkJUwF3DggI5FmUNPcM9ozBlSqqadD2wtq+GC6VmujTXeBOZ8xerM0CZ5+3g8he8x2FI1oG0aFJueagMmmUJ5MwuPrqbDYJLor8XoLb9vxjbxgJKOo/xXzUu7GLu7mOU2rW+DmsmaTntK2zsbmEF9JTU4xnDBmh5s+tynh87S8Hk16+njJKdv04QfaNSPswuozGQlvS0ObQMtisgu+unLcLQ593g5zdD45+1+1WlKThy/VYTF5DvH53Ty+XGTe/w+VPxn76DxW+zsyEsZRQDsgnQVXVA5gaMmlSrVqRm51LzipyS747Pwa1lTtfcZvcWuJjOSjWRJe+N1G++gy2rzG0udfqvjqEAOsNlc/Z8lZw5qWsQJa82nN1WcEF9FmLE0c43qt9/U9RCixgXZrjOhzdTD5sfrNpEcyEm0Gy01p0ChrZ+wYzgyYUawHVKAQpIAepJagpGZWSTNxCabj01wipCZYrFNtbu0MTAPqnk4gBipRc2pEP1AGnULdd8Ckeqdj9bAUnLEDkwgt1TgDlZobqmXbUmg70ws1972Yf5Hk6gfOisCAL5d3tzFQAAOC4lRI3lGpNaeD7no69cOkJzVgZwvne4wel1+E+uRsDCnMubo6pHon3efVl7+j2tzy3Xn6Y5vRXbBPGKsyY+N8eSrXsZ7P5/M/AAAA//8DABaJERuCBAAA

View File

@ -1,5 +0,0 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACoxU227cNhD9FYGvFRXeRerNtR10kTo2sou26NuIHNmsZWohUU4Cw/9eUGvnigJ9EYQhOefMmTPzRBI8IOnI2fF4+YgpL6QmOW4hwYShzFDGD1x3wnbCNs4wppX4m9QkvsPPpCOt8p57h1SiQaoC07SXg6choOOMBya0KjnhdiHdE4HYBHyMHptp+QPnJU6JdOTPmML0sWBDbPw4raGZpxF3acmQfCHzfnf+jv5+dnO4vjndWnApj5sYSEcUWNMPLaMtY4Eq07fUylZQ4Ba0dA4c6NOzmDLOCcZmCfdf8cOUE2bfiUbIhlHhyHNNAmQolHtY8PD5WFhsEl2UeL2Ft9/uiTziTDpRv4p5SvfGj/HNw9KvcQxvti+pyXGejjjniJsa1/vqKwnOGtYIIxgjNbkCfxcTVruL6nosJYK3TGGQ1OEQqHIcqFNS0iA1tMIMbSsGUpN3OCccv8l6Ff08LdOQqxeRq+9w9mfnlwn6EQvGWxgXJDXZLfsMKcA4Jbz8hH7Np1yHeS3H51PKMa3TulS7lPF2hpfz1/fn6zxjytUN5LvqN1juSEccWM+hdAKM9wNqhgMLDAxrA5pgMCgR2qCcCkY55o2CnqsAmvdDiZCa/Fo03K/e47J8ZbOZZBw3DtVLn87HiCl/JyPpCOMogrRIB8ENVTYALe6gxkgzIPeuFfwV5gDzLWbSkcH2fc+874Vy3INwIMPAZDCDE6JtQQ1St0oYo1kLPrSt4CrIFj3IQTIrSE1u5imsPv/Yark14Gae/kGfi1SkI4ZpbT30vTCKW3AWFTfKGoetUwMwJX0PXFvoe85AM++s8MCNA9UHPXxR6TLdxoQXcTmO8PkbXNuYRv7iASwfQP1w/e0MD/hxmu/fn2zcvL88kJp8WFPZCNWuWORjTPSTKRN9tY45Hu5mhIDhagr4s4+wjEu1TagG5700QFsBnKqWaWoHkDQIaxw4561uSU0uJn+Pc1UcBjGVqfqS7Hpfnc3+Lmb0eZ0Lv782Htf76maEPEzzw3eb5JvCfhSgEZKz0pmAj6dttHE0IVgMhlOhuKbKOU6t0y3tW9u73ljUvih2vebjmqsPGOKMPm8Vv3hxwzy/Q3//sxivLnixKGfFa/vTFtuk/V9L7LkmDwjLOuPDtq27J7JLCecN+WI9jeIuXcVxjAv6KYWFdJxp2Wij9AvD/7zHmWmkler5+fn5XwAAAP//AwBG9xSTGwYAAA==

View File

@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACoxUSW/bOBT+KwLPpkKK2ihgDobTYow0jZG4M4O5cXmMicikQVFOgyL/fUBZrp2ih7kJT2/7lscfyIk9oA4tD4dPR3BxQAsU7RQqSFFjUmNCt7TtaNUxmrOKcdKyf9EC2Tt4Qx1qSqWo4oAZ1IBLTSosmVFYa+CUUE2Kqkw9xfOAuh9I2FzD0SrI/fAXhMF6hzr0t3Xav6bZwuaq96POg+9h7YYonErLfF2v7vCX5Wb7sDllDTCk4txq1KFWM0IZE7hljOJSGIMF0xKDZrySREKj61OZdRGCE30+6JfLfO2jg6i6Ii9YTnDB0fsCaRFFWlmKAbZvh7TFRNFtii+m8PTZ/UBHCKgrFmcyT+1uVG9v9oMcba9vogjPEE0Qe3j14QWOokcLdAj+ACFamLh5eMouK1GSk7yoC0LQAt0LtbMOsvVt9tAnwEK1pATNMAejccmpwLxkDGtWiaaoTdMUBi3QHQQH/VXXe6uCH7yJ2Ux59mHOyrto3ejHIVu7CM9BxFPdZ9EPgBZoM8reDrtHEPpt6x/H9M+NfcKyGkMAF7ONiLvsTzHsUIe4aBUVXHAhaqUMVAQM0UTUpNFQ6xp0WehGl7zUdcmJqkshaalFRaVJEbRAD2M8jPHM//erJbbB7vegLxtsJ443vYjGh/1ag4vW2CTNOWMyVN9PqLK556q34OIHklGHCIVCsxawKWiNy1YLLCrGcV2z2gBVvCnoiTBjn8efPBFjdMlM1ba15JISKEzTlqQxkmhlmOK6ktAUDWlaaLkiRFYlbSVXRAOtSp3QBa9HFX+1ApsEehxdus5snWC/Woe/1+WFkU3w0SvfJ8FsD09vQ4T971Rb+f3BDzYm/GaW9tsA996lv/P9z5zNxUsfLzFId5BNp1cbIaXkgCkrpvvnWDZMYVKBIAUFxZt0erdevUDIksGEdZMmZ089PGXLoHY2gopjSJP/mUCd5Px8PpkLH/nXT9uVD7A8HBZz9I9jIunU7GyAD+/KtyGl7/wQryDP0J6gN+fFruyk4Xh6quyEU+sWdE1xUdIKl5xT3PKqwbJpJZd1C5W62DV7BG0DqDj124YxTZuZ/Z0vlyFaI1Qc0vF88Wqy0+zPOeXXJa9k+1l9Gn4l3WyluRMlybJPp4dzctD/ejff39/f/wMAAP//AwDurNISKAYAAA==

View File

@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpRTy27cOBD8FYFnUeZLlKibMd5FBk7Wg8RIFntrsVsZIjI1kCgngTH/vqBmgsS55UYUWd3VVc0XFuGJWMduT6e/nimmhZUshQ1SQlkuLBfyUbadrDvtqkYIZVT9HytZuKfvrGON8V56R1yTJW5Q1LzXg+eI5KSQKFRtck34vLDuhUGokJ6Dp2paPtK8hCmyjn0KEaevuTeEyo/TitU8jbSPS4Los5h/9rt7/vb28PhwuLxaaMnkKiDrWItaSK2Bt1pLbmAYOGjsOaF2dS96atBeaCEmmiOM1YJffvbHKUVKvlOV0pXgyrFzyRASZMk9LPT4/ZRVbBbdZbzc4O3YvbBnmlmnyh9mXsrd+DHc+OnpCSLeDCGG5chKdpqnE80p0GbHNuE4QgpTLK5NdmOgmFjJHj4UhxHSMM1Przz6cBl9/weTvwN/DJGK/R3rmJCkULfEByUtNy0Ch1o7bq22A0nvGiVZyXZTTCGu07oU+5jo87ypZB37G8aFLvpuZ38MiXxa5yz9X5uzpm8h7SbMgGAlO8wTrj4VP+2WohKVFvnyYU2nNRXvCcNMPlGe6XFer+V/oyirNtJunWeKqThAOhZvYDmyjjlovQQHDsB6P1AtaBAowIoGyaIlNAobNM6gNU54a6CXBqGW/ZCRrDunW2wL5TyAbUFyMfiaG3TEe9kL3tTSKgQBIPwrW4uHMfPAt8IQau5oQG6cBO6M1hx1DY2yQ9Oo4RdLrolLkf1Ger58jU2BRWwJreTKyJob5yRvXd3wvml719uWap8139McafzFqHfBz9MyDam4Lkzxyrr3a8zfu9iW52uI/NsW2d3kv9Bc5MghxLzN15TP5/P5fwAAAP//AwAe+Q9dJQQAAA==

View File

@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpRU0W7cKBT9FYtn44DB2PgtmrTaUbabUTvqVn27wHWD4uAR4LRRlH9f4ZlVmqfVviB0zbmce87BLyTAI5KRXJ9OH54w5ERqkv1WalmrKFOU8SMfRt6NQjdKcy364Tupib/FZzKSXlrLrUYqUCGVjnXUiMlS51Bzxh1rO1l6wo9ExhcCvnH45C02S/qKMfklkJH87YNbfpa7wTd2XlbXxGXGfUgZgi1k/trvbumf14fj3eF8KmEq4MY7MpLBCcaFADoIwamEaaIgnKHohO4MM9g7dYb5kDEGmJvkHt7ud0sOmO3YNq1oGG01ea2JgwyFsoGEx+dTYbFJdFPq9VbetuMLecJIxrb+V8xzuys7+6vHZFY/u6vzmiE9pG2dwOYlPpOanOJywpg9bvpcp4SPZn4+Qnr4eD5TtunDL7RrRrdb1pDJSLgYSE02geYZsl9CdeG4mz2GvH3M0Yfk7X/1EqQmd1+qwwx5WuLjOz++nGXe/w+VP4G99wGr/Q0ZCePYOjEgnVquqBwcUOiEpkoJNSG3um85qcluCdmHdVlTtQ8Zf8RtJDKSjzAnPPO7jvbeZ7R5jWXOb6rk6hAXt9pcvXnJWcMawVgBrfm05uozOh/RZixDHON66ff1PaRV7QbarTFiyNUB8n31B6R7MhINg+WgQQMoayfsGE7MMVCsd6icQidb1zuppVNSM6skGC4ddNxMpUJqgiU61ZZW0Rk5GQCqjDJUuqmlRhtJjQOHqjMKoFjypmN1Nxcc2IFJdIJqnByVmgPVUgjqRAd9q6a+b6ffJLnkgbMisMOn87vbGCjnBnSK01byjkqtOR1011PTD0YbNWBnC+dbjAHn34T65G1c0jLl6pKQ6p10n9dQ/h3VlpafPtBfm0c3i33AWBWPwYfyVC62vr6+vv4DAAD//wMAfSYZIoIEAAA=

View File

@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACoxUy27kNhD8FYHXiDJfokjdHNuLDBw/sDNIgtxaZMtmLFMDirJ3YfjfA2ns9WMRIBdBaJJd1dXV/UQi3CNpyfF+f/aAMU+kJDmsIcGEpkxTxnfctLxupa201Uor9TcpSTjH76QljXKOO4tUokaqPKtpJ3tHvUfLGfdM1GrJCTcTaZ8IhMrjQ3BYjdMfmKYwRtKSP0P04+OCDaFywzj7Ko0DbuKUIbqFzOXm5Jz+fny9u7o+3JpwWh5XwZOWGC8ZlxKokZJTBX1PQfqOope27liHjdeHZyFmTBGGavJ3b/h+zBGza0UlZMWosOS5JB4yLJQ7mHD3fb+wWCU6XeLlGl5/2yfygIm0onwV85DuyA3h6H7q5jD4o/VLSrJP4x5TDriqcbUt3khwVrFKaMEYKckFuNsQsdicFlfDUiI4wxR6SS32nirLgVolJfWyhkbovmlET0pyjini8C7rRXBpnMY+Fy8iFx9wtscnZxG6AReMLzBMSEqymbYZoodhjHj2Dd2cD7l2aV6OT8aYQ5zHeSo2MeNNgpfz1/cnc0oYc3EN+bb4DaZb0hILxnGwYAG0cz3WDHvmGWjWeNReo1fCN15Z5bWyzGkFHVceat71S4SU5NdFw+3sHE7TG5vVJMOwcihe+nQyBIz5g4ykJYyj8NIg7QXXVBkPFGppqdZS98idbQR/hdlBusFMWtKbruuYc51QljsQFqTvmfS6t0I0Dahe1o0SWtesAeebRnDlZYMOZC+ZEaQk12n0s8ufWy3XBlyn8R90eZGKtESzujYOuk5oxQ1Yg4prZbTFxqoemJKuA14b6DrOoGbOGuGAawuq83X/Q6WzeBMinoZpP8D3d7im0pX8xQEY3oP6dP1Lgnt8HNPd5cHG1eXZjpTk6xyXjVBsFos8hki/6WWiL+Yhh91tQvDoL0aPP/sIl3Ep1gmtRaeFN5KCaTRVUloKneC0VwZ6DbqXuAzV6ejuMBWLwyDEZap+JLvaFsfJ3YaMLs9p4ffXyuNqW1wPkPsx3X/YJO8K+yxAJSRnS2c8Phy20cpRe2/Qa06F4jVV1nJqbN3QrjGd7bTB2i2KXc15P+fiK/qQ0OW14hcvrpgnt+jufhbj1QUvFuVs8dr2sMVWaf/XEnsuyT3CNCe8X7d1+0Q2MWJakU/nwyhu4kUYhjChG6OfSGsabapaSvXC8D/vGckqoWzz/Pz8/C8AAAD//wMAMmO+UhsGAAA=

View File

@ -0,0 +1,5 @@
https://dc.services.visualstudio.com/v2/track
Content-Type:application/x-json-stream
Content-Encoding:gzip
H4sIAAAAAAAACpRTTW/UMBD9K5HP69SOHSfOrdqCWBXoClaAuE08E2o1dVaOU0DV/nfk7CIoNy6WNfKbeR/jZxbgkVjHro/HV08U0sw2LPm1VInKcGG4kAfZdrLulC2N1VLZ9ivbMH9LP1nHGu2cdJa4IkNco6h5rwbHEclKIVFUtc494dvMumcGvkR68o7Kaf5EcfZTYB377ANO3/Ns8KUbpwXLOI20C3OC4DKZ97vtLX97vT/c7c+vZpozuPTIOtaiElIp4K1SkmsYBg4Ke06obN2Lnho0Z5gPiWKAsZzx4c98nFKg5LqqrFQpeGXZacMQEmTKPcx0+HnMLFaLbnJ9s5bXa/fMniiyrtr8NvPc7sqN/upx7hc/4tX5TDA/ZJXHOB0pJk+rJ6vMcYTkp1BcJm1HTyGxDbv7WOxHSMMUH18Y9fGsf/cf8g95+qsf5JZEuJ2WkFjHpJZsw96Bu/eBit0N65iQVKFqiQ+VNFy3CBxqZbkxygwknW2qjNlOIfmwTMtc7EKib3EVwDr2GsaZztSvo7v3iVxaYlb1xeRd2McJF5eKP/5LUYpSCZFBSzouqfhA6CO5RFnfIS6Xfv9AKlOtoO0SI4VU7CHdF29gvmcds9A6CRYsgHFuoFrQIFCAEQ2SQUOoK2xQW41GW+GMhl5qhFr2Q66wDaMcd7FumJHD0CsUXIqh5lrTwFvZ9lzpRkqlCIRTL3ws7saMA9cKTai4pQG5thK41UpxVDU0lRmaphr+suSSvhTZYKSn8185M0BsCY3klZY119ZK3tq64X3T9rY3LdUuc76lGGj8y6h33sVpnoZUXJaneGHdhyXk/16si/TdB/5jzehmcg8Ui5wx+JDX+xLr6XQ6/QIAAP//AwCXfW+uNgQAAA==

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,12 @@
using Microsoft.AspNetCore.Mvc;
using PlotLine.Services;
namespace PlotLine.Controllers;
public sealed class AcceptanceController(IAcceptanceService acceptance) : Controller
{
public async Task<IActionResult> Phase1(int? projectId)
{
return View(await acceptance.GetPhase1ChecklistAsync(projectId));
}
}

View File

@ -19,6 +19,7 @@ public sealed class TimelineController(ITimelineService timeline) : Controller
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> SavePreset(TimelinePresetSaveViewModel model)
{
await timeline.SavePresetAsync(model);
@ -42,6 +43,7 @@ public sealed class TimelineController(ITimelineService timeline) : Controller
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeletePreset(int id, int projectId, int? bookId)
{
await timeline.ArchivePresetAsync(id);

View File

@ -257,6 +257,11 @@ public interface IArchiveRepository
Task<ArchiveDeleteResult> DeleteForeverAsync(string entityType, int entityId, string confirmationText);
}
public interface IAcceptanceRepository
{
Task<IReadOnlyList<Phase1AcceptanceChecklistItem>> GetPhase1ChecklistAsync(int? projectId);
}
public sealed class TimelineData
{
public Project? Project { get; init; }
@ -1038,6 +1043,19 @@ public sealed class ArchiveRepository(ISqlConnectionFactory connectionFactory) :
}
}
public sealed class AcceptanceRepository(ISqlConnectionFactory connectionFactory) : IAcceptanceRepository
{
public async Task<IReadOnlyList<Phase1AcceptanceChecklistItem>> GetPhase1ChecklistAsync(int? projectId)
{
using var connection = connectionFactory.CreateConnection();
var rows = await connection.QueryAsync<Phase1AcceptanceChecklistItem>(
"dbo.Acceptance_Phase1Checklist",
new { ProjectID = projectId },
commandType: CommandType.StoredProcedure);
return rows.ToList();
}
}
public sealed class SceneDependencyRepository(ISqlConnectionFactory connectionFactory) : ISceneDependencyRepository
{
public async Task<SceneDependencyLookupData> GetLookupsAsync()

View File

@ -1513,6 +1513,15 @@ public sealed class ArchiveDeleteResult
public string Message { get; set; } = string.Empty;
}
public sealed class Phase1AcceptanceChecklistItem
{
public string AreaName { get; set; } = string.Empty;
public string CheckName { get; set; } = string.Empty;
public string Status { get; set; } = string.Empty;
public string Detail { get; set; } = string.Empty;
public int SortOrder { get; set; }
}
public sealed class AnalyticsBusyScene
{
public int SceneID { get; set; }

View File

@ -38,6 +38,7 @@ public class Program
builder.Services.AddScoped<IDynamicsRepository, DynamicsRepository>();
builder.Services.AddScoped<IScenarioRepository, ScenarioRepository>();
builder.Services.AddScoped<IArchiveRepository, ArchiveRepository>();
builder.Services.AddScoped<IAcceptanceRepository, AcceptanceRepository>();
builder.Services.AddScoped<IProjectService, ProjectService>();
builder.Services.AddScoped<IBookService, BookService>();
builder.Services.AddScoped<IChapterService, ChapterService>();
@ -55,6 +56,7 @@ public class Program
builder.Services.AddScoped<IDynamicsService, DynamicsService>();
builder.Services.AddScoped<IScenarioService, ScenarioService>();
builder.Services.AddScoped<IArchiveService, ArchiveService>();
builder.Services.AddScoped<IAcceptanceService, AcceptanceService>();
var app = builder.Build();

View File

@ -211,6 +211,11 @@ public interface IArchiveService
Task<ArchiveDeleteResult> DeleteForeverAsync(string entityType, int entityId, string confirmationText);
}
public interface IAcceptanceService
{
Task<Phase1AcceptanceViewModel> GetPhase1ChecklistAsync(int? projectId);
}
public sealed class ProjectService(IProjectRepository projects, IBookRepository books) : IProjectService
{
public Task<IReadOnlyList<Project>> ListAsync() => projects.ListAsync();
@ -2457,6 +2462,29 @@ public sealed class ArchiveService(IArchiveRepository archives) : IArchiveServic
archives.DeleteForeverAsync(entityType, entityId, confirmationText);
}
public sealed class AcceptanceService(IProjectRepository projects, IAcceptanceRepository acceptance) : IAcceptanceService
{
public async Task<Phase1AcceptanceViewModel> GetPhase1ChecklistAsync(int? projectId)
{
var projectRows = await projects.ListAsync();
var selectedProject = projectId.HasValue
? projectRows.FirstOrDefault(x => x.ProjectID == projectId.Value)
: projectRows.FirstOrDefault();
var effectiveProjectId = projectId ?? selectedProject?.ProjectID;
return new Phase1AcceptanceViewModel
{
ProjectID = effectiveProjectId,
ProjectName = selectedProject?.ProjectName,
ProjectOptions = projectRows.Select(project => new SelectListItem(
project.ProjectName,
project.ProjectID.ToString(),
project.ProjectID == effectiveProjectId)).ToList(),
Items = await acceptance.GetPhase1ChecklistAsync(effectiveProjectId)
};
}
}
public sealed class AssetService(IProjectRepository projects, IAssetRepository assets, ILocationRepository locations) : IAssetService
{
public async Task<StoryAssetListViewModel?> GetAssetsAsync(int projectId)

View File

@ -0,0 +1,131 @@
SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
CREATE OR ALTER PROCEDURE dbo.Acceptance_Phase1Checklist
@ProjectID int = NULL
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ProjectCount int = (SELECT COUNT(*) FROM dbo.Projects WHERE IsArchived = 0 AND (@ProjectID IS NULL OR ProjectID = @ProjectID));
DECLARE @BookCount int = (
SELECT COUNT(*)
FROM dbo.Books b
INNER JOIN dbo.Projects p ON p.ProjectID = b.ProjectID
WHERE p.IsArchived = 0 AND b.IsArchived = 0 AND (@ProjectID IS NULL OR b.ProjectID = @ProjectID)
);
DECLARE @ChapterCount int = (
SELECT COUNT(*)
FROM dbo.Chapters c
INNER JOIN dbo.Books b ON b.BookID = c.BookID AND b.IsArchived = 0
INNER JOIN dbo.Projects p ON p.ProjectID = b.ProjectID AND p.IsArchived = 0
WHERE c.IsArchived = 0 AND (@ProjectID IS NULL OR b.ProjectID = @ProjectID)
);
DECLARE @SceneCount int = (
SELECT COUNT(*)
FROM dbo.Scenes s
INNER JOIN dbo.Chapters c ON c.ChapterID = s.ChapterID AND c.IsArchived = 0
INNER JOIN dbo.Books b ON b.BookID = c.BookID AND b.IsArchived = 0
INNER JOIN dbo.Projects p ON p.ProjectID = b.ProjectID AND p.IsArchived = 0
WHERE s.IsArchived = 0 AND (@ProjectID IS NULL OR b.ProjectID = @ProjectID)
);
DECLARE @EmptyChapterCount int = (
SELECT COUNT(*)
FROM dbo.Chapters c
INNER JOIN dbo.Books b ON b.BookID = c.BookID AND b.IsArchived = 0
INNER JOIN dbo.Projects p ON p.ProjectID = b.ProjectID AND p.IsArchived = 0
WHERE c.IsArchived = 0 AND (@ProjectID IS NULL OR b.ProjectID = @ProjectID)
AND NOT EXISTS (SELECT 1 FROM dbo.Scenes s WHERE s.ChapterID = c.ChapterID AND s.IsArchived = 0)
);
DECLARE @PlotLineCount int = (SELECT COUNT(*) FROM dbo.PlotLines WHERE IsArchived = 0 AND (@ProjectID IS NULL OR ProjectID = @ProjectID));
DECLARE @PlotThreadCount int = (
SELECT COUNT(*)
FROM dbo.PlotThreads pt
INNER JOIN dbo.PlotLines pl ON pl.PlotLineID = pt.PlotLineID AND pl.IsArchived = 0
WHERE pt.IsArchived = 0 AND (@ProjectID IS NULL OR pl.ProjectID = @ProjectID)
);
DECLARE @AssetCount int = (SELECT COUNT(*) FROM dbo.StoryAssets WHERE IsArchived = 0 AND (@ProjectID IS NULL OR ProjectID = @ProjectID));
DECLARE @CharacterCount int = (SELECT COUNT(*) FROM dbo.Characters WHERE IsArchived = 0 AND (@ProjectID IS NULL OR ProjectID = @ProjectID));
DECLARE @LocationCount int = (SELECT COUNT(*) FROM dbo.Locations WHERE IsArchived = 0 AND (@ProjectID IS NULL OR ProjectID = @ProjectID));
DECLARE @ScenarioCount int = (SELECT COUNT(*) FROM dbo.Scenarios WHERE IsArchived = 0 AND (@ProjectID IS NULL OR ProjectID = @ProjectID));
DECLARE @WarningCount int = (
SELECT COUNT(*)
FROM dbo.ContinuityWarnings cw
WHERE cw.IsDismissed = 0 AND cw.IsIntentional = 0 AND (@ProjectID IS NULL OR cw.ProjectID = @ProjectID)
);
DECLARE @ArchivedCount int =
(SELECT COUNT(*) FROM dbo.Projects WHERE IsArchived = 1 AND (@ProjectID IS NULL OR ProjectID = @ProjectID))
+ (SELECT COUNT(*) FROM dbo.Books WHERE IsArchived = 1 AND (@ProjectID IS NULL OR ProjectID = @ProjectID))
+ (SELECT COUNT(*) FROM dbo.Chapters c INNER JOIN dbo.Books b ON b.BookID = c.BookID WHERE c.IsArchived = 1 AND (@ProjectID IS NULL OR b.ProjectID = @ProjectID))
+ (SELECT COUNT(*) FROM dbo.Scenes s INNER JOIN dbo.Chapters c ON c.ChapterID = s.ChapterID INNER JOIN dbo.Books b ON b.BookID = c.BookID WHERE s.IsArchived = 1 AND (@ProjectID IS NULL OR b.ProjectID = @ProjectID))
+ (SELECT COUNT(*) FROM dbo.PlotLines WHERE IsArchived = 1 AND (@ProjectID IS NULL OR ProjectID = @ProjectID))
+ (SELECT COUNT(*) FROM dbo.PlotThreads pt INNER JOIN dbo.PlotLines pl ON pl.PlotLineID = pt.PlotLineID WHERE pt.IsArchived = 1 AND (@ProjectID IS NULL OR pl.ProjectID = @ProjectID))
+ (SELECT COUNT(*) FROM dbo.StoryAssets WHERE IsArchived = 1 AND (@ProjectID IS NULL OR ProjectID = @ProjectID))
+ (SELECT COUNT(*) FROM dbo.Characters WHERE IsArchived = 1 AND (@ProjectID IS NULL OR ProjectID = @ProjectID))
+ (SELECT COUNT(*) FROM dbo.Locations WHERE IsArchived = 1 AND (@ProjectID IS NULL OR ProjectID = @ProjectID))
+ (SELECT COUNT(*) FROM dbo.Scenarios WHERE IsArchived = 1 AND (@ProjectID IS NULL OR ProjectID = @ProjectID))
+ (SELECT COUNT(*) FROM dbo.CharacterRelationships WHERE IsArchived = 1 AND (@ProjectID IS NULL OR ProjectID = @ProjectID));
SELECT AreaName, CheckName, Status, Detail, SortOrder
FROM
(
SELECT N'Timeline' AS AreaName, N'Project hierarchy' AS CheckName,
CASE WHEN @ProjectCount > 0 AND @BookCount > 0 AND @ChapterCount > 0 THEN N'Pass' ELSE N'Review' END AS Status,
CONCAT(@ProjectCount, N' active project(s), ', @BookCount, N' active book(s), ', @ChapterCount, N' active chapter(s).') AS Detail,
10 AS SortOrder
UNION ALL
SELECT N'Timeline', N'Scene columns and empty chapters',
CASE WHEN @SceneCount > 0 THEN N'Pass' WHEN @ChapterCount > 0 THEN N'Review' ELSE N'Blocked' END,
CONCAT(@SceneCount, N' active scene(s). ', @EmptyChapterCount, N' empty chapter(s) will render as placeholder timeline columns.'),
20
UNION ALL
SELECT N'Timeline', N'Plot/thread lanes',
CASE WHEN @PlotLineCount > 0 AND @PlotThreadCount > 0 THEN N'Pass' WHEN @PlotLineCount > 0 THEN N'Review' ELSE N'Review' END,
CONCAT(@PlotLineCount, N' plot line(s), ', @PlotThreadCount, N' plot thread(s).'),
30
UNION ALL
SELECT N'Timeline', N'Asset and character lanes',
CASE WHEN @AssetCount > 0 AND @CharacterCount > 0 THEN N'Pass' WHEN @SceneCount > 0 THEN N'Review' ELSE N'Blocked' END,
CONCAT(@AssetCount, N' asset(s), ', @CharacterCount, N' character(s), ', @LocationCount, N' location(s).'),
40
UNION ALL
SELECT N'CRUD and Navigation', N'Core hierarchy',
CASE WHEN @ProjectCount > 0 AND @BookCount > 0 AND @ChapterCount > 0 AND @SceneCount > 0 THEN N'Pass' ELSE N'Review' END,
N'Projects, books, chapters and scenes have create/edit/detail/archive routes and parent navigation.',
110
UNION ALL
SELECT N'CRUD and Navigation', N'Story entities',
CASE WHEN @AssetCount > 0 OR @CharacterCount > 0 OR @LocationCount > 0 OR @PlotThreadCount > 0 THEN N'Pass' ELSE N'Review' END,
N'Characters, assets, locations, plot lines and threads are available from project and timeline navigation.',
120
UNION ALL
SELECT N'Archive and Restore', N'Archived item handling',
N'Pass',
CONCAT(@ArchivedCount, N' archived item(s). Archive, restore and guarded delete forever routes are available through Archived Items.'),
210
UNION ALL
SELECT N'Warnings and Validation', N'Actionable warnings',
CASE WHEN @WarningCount = 0 THEN N'Pass' ELSE N'Review' END,
CONCAT(@WarningCount, N' active warning(s) need review. Warnings link back to scene/timeline context.'),
310
UNION ALL
SELECT N'Writer Workflow', N'Chapter and scene workflow',
CASE WHEN @SceneCount > 0 THEN N'Pass' ELSE N'Review' END,
N'Scene workflow, notes, checklist items and attachments are available through the scene inspector and writer workspace.',
410
UNION ALL
SELECT N'Story Bible and Analytics', N'Story review surfaces',
CASE WHEN @SceneCount > 0 THEN N'Pass' ELSE N'Review' END,
N'Story Bible, analytics, dynamics, exports and search use active project/story data.',
510
UNION ALL
SELECT N'Scenario Sandbox', N'Scenario readiness',
CASE WHEN @ScenarioCount > 0 THEN N'Pass' ELSE N'Review' END,
CONCAT(@ScenarioCount, N' active scenario(s). Scenario creation remains available from project/timeline context.'),
610
) checks
ORDER BY SortOrder;
END;
GO

View File

@ -360,6 +360,17 @@ public sealed class ArchivedItemsViewModel
public IReadOnlyList<ArchivedItem> Items { get; set; } = [];
}
public sealed class Phase1AcceptanceViewModel
{
public int? ProjectID { get; set; }
public string? ProjectName { get; set; }
public IReadOnlyList<SelectListItem> ProjectOptions { get; set; } = [];
public IReadOnlyList<Phase1AcceptanceChecklistItem> Items { get; set; } = [];
public int PassCount => Items.Count(x => x.Status == "Pass");
public int ReviewCount => Items.Count(x => x.Status == "Review");
public int BlockedCount => Items.Count(x => x.Status == "Blocked");
}
public sealed class TimelineViewModel
{
public Project Project { get; set; } = new();

View File

@ -0,0 +1,88 @@
@model Phase1AcceptanceViewModel
@{
ViewData["Title"] = "Phase 1 Acceptance Checklist";
}
<section class="context-header">
<div class="context-title">
<span class="eyebrow">Stability report</span>
<strong>@(Model.ProjectName ?? "All projects")</strong>
</div>
<nav class="context-nav" aria-label="Acceptance navigation">
@if (Model.ProjectID.HasValue)
{
<a asp-controller="Projects" asp-action="Details" asp-route-id="@Model.ProjectID">Project</a>
<a asp-controller="Timeline" asp-action="Index" asp-route-projectId="@Model.ProjectID">Timeline</a>
<a asp-controller="Warnings" asp-action="Index" asp-route-projectId="@Model.ProjectID">Warnings</a>
<a asp-controller="Archives" asp-action="Index" asp-route-projectId="@Model.ProjectID">Archived Items</a>
}
<a asp-controller="Projects" asp-action="Index">Projects</a>
</nav>
</section>
<div class="page-heading">
<div>
<p class="eyebrow">Phase 1U</p>
<h1>Phase 1 Acceptance Checklist</h1>
<p class="lead-text">A compact stability report for timeline, CRUD, archive, warnings, writer workflow, exports, and scenario readiness.</p>
</div>
<form method="get" class="timeline-filter">
<select class="form-select" name="projectId" asp-items="Model.ProjectOptions">
<option value="">First active project</option>
</select>
<button class="btn btn-outline-primary" type="submit">View report</button>
</form>
</div>
<section class="acceptance-summary-grid">
<article class="plain-card acceptance-summary pass">
<span class="eyebrow">Pass</span>
<strong>@Model.PassCount</strong>
</article>
<article class="plain-card acceptance-summary review">
<span class="eyebrow">Needs review</span>
<strong>@Model.ReviewCount</strong>
</article>
<article class="plain-card acceptance-summary blocked">
<span class="eyebrow">Blocked</span>
<strong>@Model.BlockedCount</strong>
</article>
</section>
<section class="story-bible-section">
<div class="story-bible-section-heading">
<div>
<p class="eyebrow">Acceptance</p>
<h2>Workflow Checks</h2>
</div>
<span class="soft-count">@Model.Items.Count check@(Model.Items.Count == 1 ? "" : "s")</span>
</div>
@if (!Model.Items.Any())
{
<p class="muted">No checklist data is available yet. Create a project to begin the Phase 1 acceptance pass.</p>
}
else
{
<div class="acceptance-check-list">
@foreach (var group in Model.Items.GroupBy(x => x.AreaName))
{
<article class="acceptance-area">
<h3>@group.Key</h3>
<div class="acceptance-check-items">
@foreach (var item in group.OrderBy(x => x.SortOrder))
{
<div class="acceptance-check-item @item.Status.ToLowerInvariant()">
<span class="acceptance-status">@item.Status</span>
<div>
<strong>@item.CheckName</strong>
<p>@item.Detail</p>
</div>
</div>
}
</div>
</article>
}
</div>
}
</section>

View File

@ -20,6 +20,7 @@
<a asp-controller="StoryBible" asp-action="Index" asp-route-projectId="@Model.Project.ProjectID">Story Bible</a>
<a asp-controller="Analytics" asp-action="Index" asp-route-projectId="@Model.Project.ProjectID">Story health</a>
<a asp-controller="Dynamics" asp-action="Story" asp-route-projectId="@Model.Project.ProjectID">Story dynamics</a>
<a asp-controller="Acceptance" asp-action="Phase1" asp-route-projectId="@Model.Project.ProjectID">Phase 1 Checklist</a>
<a asp-controller="Warnings" asp-action="Index" asp-route-projectId="@Model.Project.ProjectID">Warnings</a>
<a asp-controller="Archives" asp-action="Index" asp-route-projectId="@Model.Project.ProjectID">Archived Items</a>
<a asp-controller="Characters" asp-action="Index" asp-route-projectId="@Model.Project.ProjectID">Characters</a>
@ -52,6 +53,7 @@
<a class="btn btn-outline-primary" asp-controller="Warnings" asp-action="Index" asp-route-projectId="@Model.Project.ProjectID">Warnings</a>
<a class="btn btn-outline-primary" asp-controller="Analytics" asp-action="Index" asp-route-projectId="@Model.Project.ProjectID">Story health</a>
<a class="btn btn-outline-primary" asp-controller="Dynamics" asp-action="Story" asp-route-projectId="@Model.Project.ProjectID">Story dynamics</a>
<a class="btn btn-outline-secondary" asp-controller="Acceptance" asp-action="Phase1" asp-route-projectId="@Model.Project.ProjectID">Phase 1 Checklist</a>
<a class="btn btn-outline-secondary" asp-controller="Archives" asp-action="Index" asp-route-projectId="@Model.Project.ProjectID">Archived Items</a>
<a class="btn btn-primary" asp-controller="Books" asp-action="Create" asp-route-projectId="@Model.Project.ProjectID">Add book</a>
<form asp-action="Archive" method="post" class="archive-button-form" data-confirm-message="Archive this project?&#10;&#10;This will hide it from active lists and timelines, but the data will be kept and can be restored later.">

View File

@ -25,8 +25,13 @@
<select asp-for="AssetKindID" asp-items="Model.AssetKindOptions" class="form-select"></select>
</div>
<div class="col-md-4">
<label asp-for="Importance" class="form-label"></label>
<input asp-for="Importance" class="form-range" min="1" max="10" />
<div class="metric-slider asset-importance-slider">
<div class="metric-slider-label">
<label asp-for="Importance"></label>
<output>@Model.Importance</output>
</div>
<input asp-for="Importance" type="range" class="form-range" min="1" max="10" oninput="this.previousElementSibling.querySelector('output').value = this.value" />
</div>
<span asp-validation-for="Importance" class="text-danger"></span>
</div>
<div class="col-md-4">

View File

@ -1322,6 +1322,13 @@ td.text-end {
accent-color: var(--plotline-accent);
}
.asset-importance-slider {
border: 1px solid var(--plotline-line);
border-radius: 8px;
padding: 10px 12px;
background: rgba(47, 111, 99, 0.05);
}
.scene-inspector-root {
display: grid;
gap: 12px;
@ -3075,6 +3082,101 @@ body.dragging-location [data-drag-type="location"] {
margin: 0;
}
.acceptance-summary-grid {
display: grid;
grid-template-columns: repeat(3, minmax(160px, 1fr));
gap: 12px;
margin-bottom: 16px;
}
.acceptance-summary {
display: grid;
gap: 4px;
padding: 16px;
}
.acceptance-summary strong {
font-size: 2rem;
line-height: 1;
}
.acceptance-summary.pass {
border-left: 5px solid #4d7654;
}
.acceptance-summary.review {
border-left: 5px solid #b8762b;
}
.acceptance-summary.blocked {
border-left: 5px solid #963f36;
}
.acceptance-check-list {
display: grid;
gap: 14px;
}
.acceptance-area {
border: 1px solid var(--plotline-line);
border-radius: 10px;
padding: 12px;
background: rgba(255, 255, 255, 0.62);
}
.acceptance-area h3 {
margin: 0 0 10px;
font-size: 1.05rem;
}
.acceptance-check-items {
display: grid;
gap: 8px;
}
.acceptance-check-item {
display: grid;
grid-template-columns: 92px minmax(0, 1fr);
gap: 10px;
align-items: start;
border: 1px solid rgba(82, 75, 65, 0.12);
border-radius: 8px;
padding: 10px;
background: rgba(255, 255, 255, 0.74);
}
.acceptance-check-item p {
margin: 2px 0 0;
color: var(--plotline-muted);
}
.acceptance-status {
display: inline-flex;
justify-content: center;
width: fit-content;
min-width: 74px;
border-radius: 999px;
padding: 3px 9px;
font-size: 0.72rem;
font-weight: 900;
text-transform: uppercase;
}
.acceptance-check-item.pass .acceptance-status {
color: #24512b;
background: #e6f4e7;
}
.acceptance-check-item.review .acceptance-status {
color: #7b4b13;
background: #fbecd3;
}
.acceptance-check-item.blocked .acceptance-status {
color: #7a2222;
background: #fff0f0;
}
.plotline-confirm-modal .modal-title {
color: var(--plotline-ink);
}